分享

文件输入/输出

 昵称9979883 2012-05-16
如何打开一个文件?

你可以使用下面的语句来打开文件。 但请注意,如果你不使用任何附加值,打开的文件只能进行读取而不能更改。而且是二进制模式。

如果你没有指定目录,系统将使用配置参数DIR_HOME定义的目录作为默认目录。 因此  我建议你在文件名变量里使用完整的文件路径  以避免混乱。  

语法

OPEN DATASET <file_name>.

SY-SUBRC = 0. “文件打开.

SY-SUBRC = 8. “文件无法打开。

如何从文件中读取数据?

如果你想从文件中读取数据,可以使用”OPEN DATASET“ ”READ DATASET 语句.  只要用户有更改权限, 这个语句就能以读取/更新模式打开文件。

如果用户没有更改权限,文件只以'读取'模式打开。 如果这仍然不能打开文件,错误信息就会出现。

 下面的代码范例显示如何打开一个文件,一行行读出数据,并保存数据到一个内部表中。

DATA: input_file(40TYPE c,
itab(
94OCCURS 0 WITH HEADER LINE,
msg(
100).

OPEN DATASET input_file FOR INPUT IN TEXT MODE
ENCODING DEFAULT MESSAGE msg.

IF sy-subrc NE 0.
  
WRITE:/ 'ERROR opening file', input_file, 'with message',
ELSE.
  
DO.
    
READ DATASET input_file INTO itab.
    
IF sy-subrc = 0.
      
APPEND itab.
    
ENDIF.

ENDDO.

  CLOSE DATASET input_file.
ENDIF.  

如何到一个文件中填写数据

如果你需要保存数据到一个文件中,你可以使用“OPEN DATASET”

对于OUTPUT的语句, 只要用户有文件读取的授权, 此语句试图以'/更新'模式打开文件。  如果用户没有授权,系统中打开''模式文件。

如果该文件已存在,其现有的内容被删除。

如果该文件不存在,系统会创建一个新文件。

代码范例通过循环(LOOP)从 内表中读取数据, 然后一行行地转移到文件中。

DATA: output_file(40TYPE c,
itab(
94OCCURS 0 WITH HEADER LINE,
msg(
100).

OPEN DATASET output_file FOR OUTPUT IN TEXT MODE
ENCODING DEFAULT MESSAGE msg.
IF sy-subrc EQ 0.
  
LOOP AT itab.
    
TRANSFER itab TO output_file.
  
ENDLOOP.
  
CLOSE DATASET output_file.
ELSE.

 WRITE:/ 'ERROR: Writing file with message', msg.
ENDIF.  

如何将数据加到一个文件的尾部

前面的范例是把数据加到一个文件中。

如果文件在系统中存在,旧的内容会被删除然后加进新的数据。 但在很多情况下,你不想清除现有的内容。

你只是想追加新的内容到文件的末尾。

要做到这一点,你可以使用“OPEN DATASET... FOR APPENDING“语句这个语句会试图打开文件成追加'模式, 然后你可以把新的数据加到文件的末尾。

如何使你的文件I / O程序可以在不同的操作系统下运行

正如你在下面的例子中看到,你需要提供一个逻辑文件名和所属操作系统的名称,从而获得实时的物理文件名。

If you don't specify the operating system, the function module will use system defined operating system name, sy-opsys, by default. 如果你不指定操作系统,功能模块将使用系统定义的默认操作系统的名(SY - opsys)。 

DATA: lv_filenam TYPE string.

CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
*  CLIENT                       = SY-MANDT

logical_filename             = '<file_name>'

*  OPERATING_SYSTEM             = SY-OPSYS
*  PARAMETER_1                  = ' '
*  PARAMETER_2                  = ' '
*  PARAMETER_3                  = ' '
*  USE_PRESENTATION_SERVER       = ' '

*  WITH_FILE_EXTENSION          = ' '
*  USE_BUFFER                   = ' '
*  ELEMINATE_BLANKS             = 'X'
* IMPORTING *进口
*  EMERGENCY_FLAG               =
*  FILE_FORMAT                  =

file_name                    = lv_filenam
EXCEPTIONS
file_not_found               = 
1
OTHERS                       = 2.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.  

如何在ABAP程序里运行Windows /Unix命令

如果你是一个UnixWindows操作系统,下面的代码范例显示如何在该操作系统上运行命令。

该机制其实就是打开一个文件  运行命令。 然后将运行结果写入一个文件。

代码范例显示了如何运行的Unix命令。

如果你在Windows系统上,你只需把文件的路径和命令更改成Windows格式。

DATA: result_file(50VALUE '/tmp/test',
msg_text(
50),
command(
255VALUE 'ls'.

OPEN DATASET result_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT
FILTER command 
MESSAGE msg_text.
CLOSE DATASET result_file.
DELETE DATASET result_file.  

如何从应用服务器(Application Server)上检索到文件列表

使用功能模块“RZL_READ_DIR_LOCAL” 你可以从应用服务器上得到给定的文件目录中的文件列表。

下面的代码范例显示了如何从当前目录检索文件列表。

DATA: lv_fdir TYPE pfeflnamel VALUE '.',
it_files 
LIKE salfldir OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'RZL_READ_DIR_LOCAL'
  
EXPORTING
    name     = lv_fdir
  
TABLES
    file_tbl = it_files.

LOOP AT it_files.
  
WRITE: / it_files-name.
ENDLOOP.  




















    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多