ABAP使用文件

SAP-ABAP:一篇教你所有ABAP相关文件处理的程序示例与场景 要使本章中的所有示例都能正常运行,必须满足以下要求: 桌面 Office 集成 (DOI) 和对象链接与嵌入 (OLE): 本章中显示的大多数示例都需要安装 Microsoft Office 软件包。提示:以下是本篇文章正文内容,下面案例可供参考Github。 阅读详情

ABAP/4 允许使用应 用服务器或演示服务器上的顺序文件。

例如,这些 文件可以用 作数据的临时存储设备或本地程序与SAP 系统的接口。

使用应用服 务器上的文 件

ABAP/4提供一些语句,以使用存储在应用服务器顺序文件中而不是存储在数据库中的数据。下列主题说明:

文件和文件 路径的物理 定址是与平台相关的。R/3 系统提供了 允许使用平台相关文件名的功能模块和事务:

 

ABAP/4 的文件处理

ABAP/4 提供了三种 文件处理语 句:

        OPEN DATASET 语句用于打 开文件

        CLOSE DATASET 语句用于关 闭文件

        DELETE DATASET 语句用于删 除文件

 

打开文件

要在应用服 务器上打开 文件,请使 用 OPEN DATASET 语句。关于OPEN DATASET 语句的基本 形式说明, 参见:

OPEN DATASET 语句的基本 形式 (页 a)

OPEN DATASET 语句有若干个包括大量任务选项。可以:

关于其他选 项的详细信 息,参见OPEN DATASET 语句的关键 字文档。

 

OPEN DATASET 语句的基本 形式

要在应用服 务器上打开 文件,请如 下使用 OPEN DATASET 语句:

语法

OPEN DATASET <dsn>[options].

此语句打开 文件 <dsn> 。如果不指 定任何模式 选项,则文 件将按二进 制模式打开 (参见下述 主题)。如 果系统不能打开文件,则将系统字段SY-SUBRC 设置为 0,否则SY-SUBRC 返回 8。

可以将文件 名<dsn> 指定为字母 或包含文件 名的字段。如果未指定路径,则系统将在应用服务器上SAP 系统运行的目录中打开文件。要打开文件,运行SAP 系统的用户必须在操作系统级有相应的权限。

 

文件名是平 台相关的。 必须根据运 行 SAP 系统的操作 系统规则指 定文件名或 路径。要编 写与操作系 统中不相关 的程序,可 以使用逻辑 文件名(关 于逻辑文件 名的详细信 息,参见使用平台独 立的文件名 (页 l))。

 

DATA FNAME(60).

FNAME = '/tmp/myfile'.

OPEN DATASET 'myfile'.

OPEN DATASET FNAME.

如果 SAP 系统在 UNIX 系统下运行 ,则此示例 可以运行。 此程序在运 行 SAP 系统的目录 中以及在“ /tmp” 路径中打开 文件“myfile” 。对于其它 操作系统, 必须替换其 它文件名。 例如,对 OpenVMS 系统,可以 指定下述内 容:

FNAME = '[TMP]myfile.BIN'

OPEN DATASET 'myfile.BIN'.

 

 

接受操作系 统消息

尝试打开文 件后,要接 受操作系统 消息,请如 下使用 OPEN DATASET 语句的 MESSAGE 选项:

语法

OPEN DATASET <dsn>MESSAGE <msg>.

系统将在变 量 <msg> 中放置相关 的操作系统 消息。

要进行错误 处理,请与 系统字段一 起使用此选 项。

 

DATA: MESS(60),
      FNAME(10) VALUE 'hugo.xyz'.

OPEN DATASET FNAME MESSAGE MESS.

IF SY-SUBRC <> 0.
  WRITE: 'SY-SUBRC:', SY-SUBRC,
       / 'System Message:', MESS.
ENDIF.

如果 SAP 系统在 UNIX 下运行且不 存在“hugo.xyz” 文件,则此 示例输出如 下:

 

 

打开文件读 取

要打开文件 进行读访问 ,请如下使 用 OPEN DATASET 语句的 FOR INPUT 选项:

语法

OPEN DATASET <dsn> FORINPUT.

此语句打开 文件用于读 取。文件必须已经存在,否则系统将SY-SUBRC 设置为 8 并且忽略此命令。

如果文件已 打开(可能 用于读、写、或追加),系统将复位到文件的起始位置。但是在重新打开文件之前使用CLOSE 语句是良好的编程风格(关于关闭文件的详细信息,参见关闭文件 (页h) )。

 

DATA FNAME(60) VALUE 'myfile'.

OPEN DATASET FNAME FOR INPUT.

IF SY-SUBRC = 0.
  WRITE / 'File opened'.
  .....
ELSE.
  WRITE / 'File not found'.
ENDIF.

在此示例中 ,打开“myfile” 文件以读取 。

 

打开文件写 入

要打开文件 进行写访问 ,请如下使 用 OPEN DATASET 语句的 FOR OUTPUT 选项:

语法

OPEN DATASET <dsn> FOROUTPUT.

此语句打开 文件用于写 入。如果文 件不存在, 则创建文件 。如果文件已存在但处于关闭状态,则删除其内容。如果文件已存在且已打开(可能为读、写、或追加),则复位到文件的起始位置。如果系统可以打开文件,则SY-SUBRC 设置为 0,否则SY-SUBRC 返回 8。

 

DATA: MESS(60),
      FNAME(10) VALUE '/tmp'.

OPEN DATASET FNAME FOR OUTPUT MESSAGE MESS.

IF SY-SUBRC <> 0.
  WRITE: 'SY-SUBRC:', SY-SUBRC,
       / 'System Message:', MESS.
ENDIF.

如果 SAP 系统在UNIX 下运行,此 示例输出如 下:

 

系统不能打 开该文件, 因为它是目 录。

 

下列程序将 演示当打开 文件用于写 入时其位置 如何设置。 但在重新打 开已打开文 件之前使用 CLOSE 语句是良好 的编程风格 (关于关闭 文件的详细 信息,参见关闭文件 (页h) )。

DATA FNAME(60) VALUE 'myfile'.
DATA NUM TYPE I.

OPEN DATASET FNAME FOR OUTPUT.

DO 10 TIMES.
  NUM = NUM + 1.
  TRANSFER NUM TO FNAME.
ENDDO.

PERFORM INPUT.

OPEN DATASET FNAME FOR OUTPUT.

NUM = 0.
DO 5 TIMES.
  NUM = NUM + 10.
  TRANSFER NUM TO FNAME.
ENDDO.

PERFORM INPUT.

CLOSE DATASET FNAME.

OPEN DATASET FNAME FOR OUTPUT.

NUM = 0.
DO 5 TIMES.
  NUM = NUM + 20.
  TRANSFER NUM TO FNAME.
ENDDO.

PERFORM INPUT.

FORM INPUT.
  SKIP.
  OPEN DATASET FNAME FOR INPUT.
  DO.
    READ DATASET FNAME INTO NUM.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.
    WRITE / NUM.
  ENDDO.
ENDFORM.

此程序输出 如下:

         1
         2
         3
         4
         5
         6
         7
         8
         9
        10

        10
        20
        30
        40
        50
         6
         7
         8
         9
        10

        20
        40
        60
        80
       100

在此示例中 ,“myfile” 文件

1.    打开 以写入。

2.    用 10 个整数填写 (关于 TRANSFER 语句的详细 信息,参见 向文件中写 入数据 (页 i) )。

3.    同时 打开以读取 ,这将复位 到文件的起 始位置。

4.    被读 入字段 NUM(关 于 READ DATASET 语句的详细 信息,参见 从文件中读 取数据 (页 k) )。NUM 的值写到输 出屏幕。

5.    重新 打开以写入 。这将复位 到文件的起 始处位置。

6.    用 5 个整数填写 。这些整数 将改写文件 的以前内容 。

7.    重新 打开以读取 。这将复位 到文件的起 始位置。

8.    被读 入字段 NUM。NUM 的值将写到 输出屏幕。

9.    关闭 (关于 CLOSE DATASET 语句的详细 信息,参见 关闭文件 (页 h) )。

10.  重 新打开以写 入。这将删 除现有文件 的内容。

11.  用 5 个整数填写 。

12.  同 时被打开以 读取。这将 复位到文件 的起始位置 。

13.  被 读入字段 NUM。NUM 的值将写到 输出屏幕。

 

 

打开文件追 加

要打开文件 追加数据, 请如下使用 OPEN DATASET 语句的 FOR APPENDING 选项:

语法

OPEN DATASET <dsn> FORAPPENDING.

此语句打开 文件在文件 末尾写入数据。如果文件不存在,则创建文件。如果文件已存在但处于关闭状态,系统将打开文件并定位到文件末尾。如果文件已存在且已打开(可能为读、写、或追加),将定位设置到文件末尾。SY-SUBRC总是返回0。

 

在再次打开 已经打开的 文件之前使 用 CLOSE 语句是良好 的编程风格 (关于关闭 文件的详细 信息,参见 关闭文件 (页 h))。

 

 

DATA FNAME(60) VALUE 'myfile'.

DATA NUM TYPE I.

OPEN DATASET FNAME FOR OUTPUT.
DO 5 TIMES.
   NUM = NUM + 1.
   TRANSFER NUM TO FNAME.
ENDDO.

OPEN DATASET FNAME FOR INPUT.

OPEN DATASET FNAME FOR APPENDING.
NUM = 0.
DO 5 TIMES.
   NUM = NUM + 10.
   TRANSFER NUM TO FNAME.
ENDDO.

OPEN DATASET FNAME FOR INPUT.
DO.
  READ DATASET FNAME INTO NUM.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE / NUM.
ENDDO.

此示例输出 如下:

          1
          2
          3
          4
          5
         10
         20
         30
         40
         50

在此示例中 ,打开文件 以写入并用 从 1 ~ 5 中的五个整 数填写(关 于 TRANSFER 语句的详细 信息,参见 向文件中写 入数据 (页i))。下一语 句 OPEN DATASET 将复位到起 始位置,然 后打开文件 以追加并且 定位设置到 末尾位置。 10~ 50 的五个整数 将写入文件 。最后读取 文件内容并 写到屏幕。

 

 

指定二进制 模式

要用二进制 模式处理文 件,请如下 使用 OPEN DATASET 语句中的 IN BINARY MODE 选项:

语法

OPEN DATASET <dsn> IN BINARY MODE [FOR....].

如果从以二 进制模式打 开的文件中读取数据或向此类文件中写入数据,则系统将逐字节地传输数据。在传输期间,系统不解释文件内容。在将文件内容写入到另一文件时,系统将传输源文件的所有字节。在从文件读取数据到字段时,传输的字节数目取决于目标字段大小。在读取之时或之后,可以用其它ABAP/4 语句给目标 字段定址, 系统将根据数据类型解释字段内容。

 

DATA FNAME(60) VALUE 'myfile'.

DATA: NUM1    TYPE I,
      NUM2     TYPE I,
      TEXT1(4) TYPE C,
      TEXT2(8) TYPE C,
      HEX      TYPE X.

OPEN DATASET FNAME FOR OUTPUT IN BINARY MODE.

NUM1  =111.
TEXT1 = 'TEXT'.
TRANSFER NUM1  TO FNAME.
TRANSFER TEXT1 TO FNAME.

OPEN DATASET FNAME FOR INPUT IN BINARY MODE.

READ DATASET FNAME INTO TEXT2.
WRITE / TEXT2.

OPEN DATASET FNAME FOR INPUT IN BINARY MODE.

READ DATASET FNAME INTO NUM2.
WRITE / NUM2.

OPEN DATASET FNAME FOR INPUT IN BINARY MODE.

SKIP.
DO.
  READ DATASET FNAME INTO HEX.
  If SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE HEX.
ENDDO.

此示例输出 如下:

###oTEXT

111

00 00 00 6F 54 45 58 54

在按二进制 模式为写入 数据而打开 文件“myfile” 后,将字段 NUM1 和 TEXT1 的内容写入 文件(关于 TRANSFER 语句的详细 信息,参见向文件中写 入数据 (页 i))。然后打 开文件以读 取并且其全 部内容传输 到字段 TEXT2 (关于 READ DATASET 语句的详细 信息,参见从文件中读 取数据 (页 k) )。字符串 TEXT2 的前四位没 什么意义, 因为各字节 是整数 111 表示法(平 台相关)。 系统企图将 所有字节解 释为字符, 但此解释工 作只对后四 个字节有效 。在用 OPEN 语句复位位 置之后,文 件的前四个 字节将读入 NUM2 。因为 NUM2 与 NUM1 的值有相同 的数据类型 ,所以 NUM2 的值有意义 。最后,将 文件的八个 字节逐字节 地从 HEX 的屏幕输出 读入到 HEX 字段中,可 以看到实际 文件内容十 六进制表示 法。后四个 字节为字 TEXT 中字符的 ASCII 表示法。

 

指定文本模 式

要用文本模 式处理文件 ,请如下使用OPEN DATASET 语句的 TEXT MODE 选项:

语法

OPEN DATASET <dsn> FOR.... IN TEXT MODE.

如果从以文 本模式打开 的文件中读 取数据或向 此类文件中 写入数据, 数据将逐行 传输。系统假定文件为行结构。

       对于每个 TRANSFER 语句(关于 TRANSFER 语句的详细 信息,参见 向文件中写 入数据 (页 i) ),系统向 文件中传输 除结尾空白 之外的所有 字节,并在 其后作行结 束标记。

       对于每个 READ DATASET 语句(关于 READ DATASET 语句的详细 信息,参见 从文件中读 取数据 (页 k) ),系统将 读取下一个 行结束标记 之前的所有 数据。如果 目标字段太 小,则截断 行的多余部 分。如果目 标字段长于 一行,则右 边各位填入 空格。

如果要将字 符串写入文 件或已知现存文件是基于行的格式,则应使用文本模式。例如,使用文本模式,可以读取在应用服务器上用专用文本编辑器创建的文件。

 

为运行在 UNIX 系统(使用 ASCII 表示法)下 的 SAP 系统写入如 下演示程序 。

DATA FNAME(60) VALUE 'myfile'.

DATA: TEXT(4),
      HEX TYPE X.

OPEN DATASET FNAME FOR OUTPUT IN TEXT MODE.

TRANSFER '12        ' TO FNAME.
TRANSFER '123456  9 ' TO FNAME.
TRANSFER '1234      ' TO FNAME.

OPEN DATASET FNAME FOR INPUT IN TEXT MODE.

READ DATASET FNAME INTO TEXT.
WRITE / TEXT.
READ DATASET FNAME INTO TEXT.
WRITE  TEXT.
READ DATASET FNAME INTO TEXT.
WRITE  TEXT.

OPEN DATASET FNAME FOR INPUT IN BINARY MODE.

SKIP.
DO.
  READ DATASET FNAME INTO HEX.
  If SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE HEX.
ENDDO.

此程序输出 如下:

12   12341234

31 32 0A 31 32 33 34 35 36 20 20 39 0A 31 32 33 340A

在此示例中 ,以文本方 式打开“myfile” 文件以写入 。三个字符 串文字(每 个长度为 10 )传送到该 文件。在按 文本模式打 开文件以读 取之后,长 度为 4 的字段 TEXT 读入存储行 。第一行从 右端开始填 入两个空格 ,第二行的 后五位被截 断。以二进 制模式打开 文件并将其 读入十六进 制字段,表 明其实际结 构:在 31 ~ 36 之间的数是 数值字符 1 ~ 6 的 ASCII 表示法, 20 表示空格字 符,在每行 结尾标有 0A 标记。注意 :字符串文 字的结尾空 格不写入文 件。

在指定位置 打开文件

要在指定位 置打开文件 ,请如下使 用 OPEN DATASET 语句的 AT POSITION 选项:

语法

OPEN DATASET <dsn> [FOR ....] [IN ...MODE] AT POSITION <pos>.

此语句打开 文件<dsn> 并为读写数 据定位位置<pos>, 该位置从文 件起始处起按字节计算。在文件起始处以前,不能指定位置。

以二进制模 式工作时, 指定位置<pos> 相当有用, 因为文本文 件的物理表示法取决于操作系统。

 

DATA FNAME(60) VALUE 'myfile'.

DATA NUM TYPE I.

OPEN DATASET FNAME FOR OUTPUT AT POSITION 16.
DO 5 TIMES.
  NUM = NUM + 1.
  TRANSFER NUM TO FNAME.
ENDDO.

OPEN DATASET FNAME FOR INPUT.
DO 9 TIMES.
  READ DATASET FNAME INTO NUM.
  WRITE / NUM.
ENDDO.

OPEN DATASET FNAME FOR INPUT AT POSITION 28.
SKIP.
DO 2 TIMES.
  READ DATASET FNAME INTO NUM.
  WRITE / NUM.
ENDDO.

此示例输出 如下:

         0
         0
         0
         0
         1
         2
         3
         4
         5

         4
         5

在此示例中 ,以默认二 进制模式打 开文件“myfile” 。写入时起 始位置指定 为 16 ,读取时起 始位置指定 为 28 。如本例所 示,如果位 置可被 4 整除,为写 入或读取整 数而指定位 置相当有用 。

 

 

 

关闭文件

要在应用服 务器上关闭 文件,请如 下使用 CLOSE DATASET 语句:

语法

CLOSE DATASET <dsn>.

此语句关闭 文件<dsn> 。文件命名 在打开文件 (页 1) 中有说明。

只有在下次 为写入打开 文件(详细信息和示例,参见打开文件写 入 (页 3) )期间要删除文件内容时,关闭文件才有必要。

 

为避免错误 并使程序易 于阅读,在 使用下一条 OPEN DATASET 语句之前应 关闭文件。 通过 CLOSE 语句,可将 文件分成逻 辑块并易于 维护。

 

DATA FNAME(60) VALUE 'myfile'.

OPEN DATASET FNAME FOR OUTPUT.
  .....
CLOSE FNAME.

OPEN DATASET FNAME FOR INPUT.
  .....
CLOSE FNAME.

OPEN DATASET FNAME FOR INPUT AT POSITION<pos>.
  .....
CLOSE FNAME.

尽管 CLOSE 语句在此示 例中没有必 要,但它可 以改善程序 格式。

 

 

 

删除文件

要在应用服 务器上删除 文件,请如 下使用 DELETE DATASET 语句:

语法

DELETE DATASET <dsn>.

此语句删除 文件<dsn> 。文件命名 在打开文件 (页 1) 中有说明。

如果系统可 以删除文件 <dsn> ,则 SY-SUBRC 返回 0,否则 SY-SUBRC 返回 4。

 

DATA FNAME(60) VALUE 'myfile'.

OPEN DATASET FNAME FOR OUTPUT.

OPEN DATASET FNAME FOR INPUT.
IF SY-SUBRC = 0.
  WRITE / 'File found'.
ELSE.
  WRITE / 'File not found'.
ENDIF.

DELETE DATASET FNAME.

OPEN DATASET FNAME FOR INPUT.
IF SY-SUBRC = 0.
  WRITE / 'File found'.
ELSE.
  WRITE / 'File not found'.
ENDIF.

此示例输出 如下:

File found

File not found

在此示例中 ,如果文件 “myfile” 不存在,则 在打开文件 以写入时创 建该文件。 当打开文件 以写入时, 系统不能查 找此文件。 在 DELETE DATASET 语句之后, 系统不再查 找文件。

向文件中写 入数据

要向在应用 服务器上的 文件写入数 据,请如下 使用 TRANSFER 语句:

语法

TRANSFER <f> to<dsn> [LENGTH <len>].

此语句将字 段 <f> 的值写入文 件 <dsn> 。可以用 OPEN DATASET 语句指定传 输模式。如果不能打开文件以写入,则系统将尝试用二进制模式打开文件,或为此文件使用OPEN DATASET 语句的选项 。但是只用OPEN DATASET 语句打开文 件是良好的 编程风格。OPEN DATASET 语句和文件 命名在打开文件 (页 1) 中有说明。字段<f> 的数据类型 可以是基本 型,或者是不包含作为组件的内表格的字段字符串。内表格不能在一次执行中写入文件。

通过 LENGHT 选项,可以 指定传输数据的长度<len> 。系统将第 一个<len> 字节写入文 件。如果<len> 太小,则截 断超出的字 节。如果<len> 太大,系统 将在传输行 的右端各位填入空格。

 

下列程序将 演示如何向 文件中写入 内表格:

DATA FNAME(60) VALUE 'myfile'.

TYPES: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
       END OF LINE.

TYPES ITAB TYPE LINE OCCURS 10.

DATA: LIN TYPE LINE,
      TAB TYPE ITAB.

DO 5 TIMES.
  LIN-COL1 = SY-INDEX.
  LIN-COL2 = SY-INDEX ** 2.
  APPEND LIN TO TAB.
ENDDO.

OPEN DATASET FNAME FOR OUTPUT.
LOOP AT TAB INTO LIN.
  TRANSFER LIN TO FNAME.
ENDLOOP.
CLOSE DATASET FNAME.

OPEN DATASET FNAME FOR INPUT.
DO.
  READ DATASET FNAME INTO LIN.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE: / LIN-COL1, LIN-COL2.
ENDDO.

CLOSE DATASET FNAME.

此示例输出 如下:

        1          1
         2          4
         3          9
         4         16
         5         25

在此示例中 ,以行类型 LINE 创建字段字 符串 LIN 与内表格 TAB。在 填完内表格 TAB 之后,它将 逐行写入文 件“ myfile ”。然后将 文件读入字 段字符串 LIN 并将 LIN 内容写到输 出屏幕。

 

为运行在 UNIX 系统(使用 ASCII 表示法)下 的 SAP 系统编写如 下演示程序 。

DATA FNAME(60) VALUE 'myfile'.

DATA: TEXT1(4) VALUE '1234',
      TEXT2(8) VALUE '12345678',
      HEX TYPE X.

OPEN DATASET FNAME FOR OUTPUT IN TEXT MODE.
TRANSFER: TEXT1 TO FNAME LENGTH 6,
          TEXT2 TO FNAME LENGTH 6.
CLOSE DATASET FNAME.

OPEN DATASET FNAME FOR INPUT.
DO.
  READ DATASET FNAME INTO HEX.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE HEX.
ENDDO.
CLOSE DATASET FNAME.

此示例输出 如下:

31 3233 34 20 20 0A 31 32 33 34 35 36 0A

在此示例中 ,将两个字 符串 TEXT1 和 TEXT2 按文本模式 写入文件“ myfile” 。输出长度 值指定为 6。通过将 文件逐字节 地读入十六 进制字段, 可以看到如 何存储文件 :数值 31 ~ 36 是数值字符 1 ~ 6 的 ASCII 表示法,20 代表空格并 且 0A 用作行结束 标志。从 TEXT1 右端开始填 入两个空格 ,并将 TEXT2 的两个位置 截掉。

 

从文件中读 取数据

要从应用服 务器上的文 件中读取数 据,请如下 使用 READ DATASET 语句:

语法

READ DATASET <dsn> INTO<f> [LENGTH <len>].

此语句从文 件 <dsn> 中读取数据 赋值给变量 <f> 。要决定把 从文件中读取的数据赋值给哪个变量,必须清楚文件结构。

可以用 OPEN DATASET 语句指定传 输模式。如 果没有打开 文件以读取 ,则系统将 尝试以二进 制模式打开 文件或为此 文件使用 OPEN DATASET 语句的选项 。但是只用OPEN DATASET 语句打开文 件是良好的 编程风格。OPEN DATASET 语句和文件 命名在打开文件 (页 1) 中有说明。

在读取操作 成功后,SY-SUBRC 将返回 0。当到文 件末尾时, SY-SUBRC 将返回 4。当不能打开文件时,SY-SUBRC 将返回 8。

如果以二进 制模式工作 ,则可以使用LENGTH 选项查找实 际传输给字 段<f> 的数据长度 。系统可用 变量<len> 值设置该长 度。

 

DATA FNAME(60) VALUE 'myfile'.

DATA: TEXT1(12) VALUE 'abcdefghijkl',
      TEXT2(5),
      LENG TYPE I.

OPEN DATASET FNAME FOR OUTPUT IN BINARY MODE.
TRANSFER TEXT1 TO FNAME.
CLOSE DATASET FNAME.

OPEN DATASET FNAME FOR INPUT IN BINARY MODE.
DO.
  READ DATASET FNAME INTO TEXT2 LENGTH LENG.
  WRITE: / SY-SUBRC, TEXT2, LENG.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
ENDDO.
CLOSE DATASET FNAME.

此示例输出 如下:

    0abcde         5
    0 fghij         5
    4 kl###         2

在此示例中 ,用字段 TEXT1 的 12 个字节填写 文件“myfile” 。然后将读 取 5 个字节赋值 给字段 TEXT2 。注意:在 到文件末尾 之后系统将 用空格填写 TEXT2 的后三个字 节,在字段 LENG 中给出实际 传输的字节 数。

如果以文本 模式工作, 可以使用LENGTH 选项查找文 件当前行的 实际长度。系统将用变量<len> 值设置行长 度。为此, 系统将计算文件中从当前位置到行结束标志符之间的字节数。

 

DATA FNAME(60) VALUE 'myfile'.

DATA: TEXT1(4) VALUE '1234    ',
      TEXT2(8) VALUE '12345678',
      TEXT3(2),
      LENG TYPE I.

OPEN DATASET FNAME FOR OUTPUT IN TEXT MODE.
   TRANSFER: TEXT1 TO FNAME,
             TEXT2 TO FNAME.
CLOSE DATASET FNAME.

OPEN DATASET FNAME FOR INPUT IN TEXT MODE.
   DO 2 TIMES.
      READ DATASET FNAME INTO TEXT3LENGTH LENG.
      WRITE: / TEXT3, LENG.
   ENDDO.
CLOSE DATASET FNAME.

此示例输出 如下:

12          4

12          8

在此示例中 ,将字符串 TEXT1 和 TEXT2 按文本模式 写入文件“ myfile” 。然后读取 它们并赋值 给长度 2 的字符串 TEXT3 。行的存储 长度将写入 字段 LENG 。

 

使用平台独 立的文件名

在ABAP/4 语句中为使 用文件指定 的文件名是物理文件名。这意味着它们恰好满足运行有SAP 系统的操作系统的要求。按特定文件名和路径从ABAP/4 程序中创建 文件后,在 操作系统级登录后,可发现此文件恰好位于该位置。

在各操作系 统之间,因 为文件和路径的命名规则不同,除非如下使用工具,否则ABAP/4 程序就不能 从一个操作 系统移植到另一个操作系统。

要使程序可 以移植,SAP系统提供了逻辑文件名和逻辑路径的概念。逻辑文件和路径连接到物理文件和路径。在特殊表格中建立这种连接。可以根据需要维护这些表格。在ABAP/4 程序中,请 使用功能模 块FILE_GET_NAME 从逻辑文件 名中创建物 理文件名。

平台独立的 文件名维护 是定制的一部分。通过选择“工具 -> 定制 -> 实现工程 -> 显示完整的 IMG.”可以发现综合说明。在出现的屏幕上,选择“基础 -> 常规基础 -> 平台独立的 文件名分配”。

关于功能模 块 FILE_GET_NAME 的说明,请 在“ABAP/4 功能库:简 介”屏幕上 输入其名称 并选择文档 。在出现的 屏幕上,单 击“功能模块文档”。

下列主题提 供了关于如 何使用平台独立文件名的简要概述。

首先解释上 面提到的表 格维护,您将了解:

然后将了解 如何使用功 能模块 FILE_GET_NAME 以将 ABAP/4 程序中的逻 辑文件名转 换成物理文 件名。

 

 

维护语法组

语法组包含 所有操作系统(遵循相同的文件命名语法)的名称。要显示或创建语法组,请调用事务SF05 ,将出现下列屏幕:

 

在此屏幕上 ,可以看到 可用语法组的列表。如果需要,可通过单击“新条目”定义新的语法组。关于如何将操作系统分配到语法组的详细信息,参见将操作系统 分配到语法 组 (页l)。

 

 

将操作系统 分配到语法 组

调用事务SF04 以显示或维护操作系统到现有语法组的分配,将出现如下屏幕:

 

在此屏幕上 ,可以看到 当前受支持的操作系统列表。要创建新条目,请单击“新条目”。要将现有条目分配到语法组,请标志操作系统并单击“详情”。将出现如下屏幕:

 

在此屏幕上 ,操作系统HP-UX 分配到语法组UNIX 。

 

创建和定义 逻辑路径

每个逻辑文 件名都可与逻辑路径连接。逻辑路径给逻辑文件名提供平台相关的物理路径。要创建逻辑路径,请调用事务SF02 。在出现的屏幕上,请选择“新条目”并定义新的逻辑路径,如下例所示:

 

通过选择“ 保存”,保 存逻辑路径。

调用事务 SF03 以将现有逻辑路径与物理路径和语法组连接。在出现的屏幕上,请选择逻辑路径维护它与语法组的连接,或单击“新条目”以创建新连接。例如,语法组UNIX 的物理路径可按如下定义:

 

对于输入字 段,可以使 用可能条目的“逻辑路径和语法组”列表。要创建“物理路径”,可使用运行时用当前值替换的保留字(用尖括弧括起)。将光标放在输入字段上并选择“帮助”,可以获得保留字列表。在物理路径中必须包括保留字<FILENAME> 。它的实际 值由使用逻 辑路径的逻辑文件名定义。在当前示例中使用的保留字<PARAM_1> 的实际值是 功能模块FILE_GET_NAME 的输入参数 。

 

 

创建和定义 逻辑文件名

要创建逻辑 文件名,请调用事务SF01 并在出现的屏幕上选择“新条目”。定义逻辑文件名如下例所示:

 

如上所述, 既可以将逻 辑文件与逻辑路径连接,也可以在输入字段“物理文件”中输入物理文件名全称。在后一种情况下,逻辑文件名仅适用于一种操作系统。输入完整物理文件的规则与为逻辑路径定义物理路径的规则相同。有关详细信息和可能保留字的列表,请选择“帮助”。

当连接到逻 辑路径时, 逻辑文件适用于所有为逻辑路径维护的语法组。输入到“物理文件”中的文件名将替换分配到逻辑路径的物理路径中的保留字<FILENAME> 。要保持此 名称独立于 操作系统,请选择以字母开始的名称,该名称最多由8 个字符组成且不包含特殊字符。

通过选择“ 保存”,保 存定义。

 

 

在ABAP/4 程序中使用 逻辑文件

可以使用功 能模块 FILE_GET_NAME 从 ABAP/4 程序中的逻 辑文件名创 建物理文件 名。要在程 序中插入调 用功能模块 ,请在 ABAP/4 编辑器屏幕 中选择“编 辑 -> 插入语句” 。在出现的 对话框窗口 中,标志“调用功能”并键入FILE_GET_NAME。 该功能模块 的参数列表如下。

输入参数

参数

功能

CLIENT

逻 辑文件和路 径的维护表 格是客户相 关的。所以 可输入所需 客户。当前 客户存储在 系统字段 SY-MANDT 中。

LOGICAL_FILENAME

将 要转换的大 写字母输入 逻辑文件名 。

OPERATING_SYSTEM

可 以输入事务 SF04 列表中包含 的任何操作 系统(参见将操作系统 分配到语法 组 (页 12) )。根据与 操作系统连 接的语法组 创建物理文 件名。默认 参数是系统 字段 SY-OPSYS 的值。

PARAMETER_1

PARAMETER_2

如 果指定这些 输入参数, 则物理路径 名中的保留 字 <PARAM_1> 和 <PARAM_2> 将由输入值 替换。

USE_PRESENTATION
_SERVER

用 此标志可决 定是否输入 显示服务器 的操作系统 而不是由参 数 OPERATING_SYSTEM 输入的操作 系统。

WITH_FILE_EXTENSION

如 果设置此标 志不等于 SPACE ,则为逻辑 文件名定义 的文件格式 将附加到物 理文件名。

 输出参数

参数

功能

EMERGENCY_FLAG

如 果此参数不 等于 SPACE ,则在逻辑 路径中不定 义物理名称 。紧急物理 名称可从表 格 FILENAME 和参数文件 参数创建。

 FILE_FORMAT

此 参数是为逻 辑文件名定 义的文件格 式。例如, 可以使用此 参数决定按 何种模式打 开文件。

FILE_NAME

此 参数是物理 文件名(要 使用文件, 可以通过 ABAP/4 语句使用此 物理文件名 )。

例外参 数

参数

功能

FILE_NOT_FOUND

如 果没有定义 逻辑文件, 则出现此例 外。

OTHERS

如 果发生其它 错误,则出 现此例外。

 

 

假定逻辑文 件 MYTEMP 和逻辑路径 TMP_SUB 在前述主题 中已定义, 并假定下列 程序:

DATA: FLAG,
      FORMAT(3),
      FNAME(60).

WRITE SY-OPSYS.

CALL FUNCTION 'FILE_GET_NAME'

    EXPORTING
          LOGICAL_FILENAME        = 'MYTEMP'
          OPERATING_SYSTEM        = SY-OPSYS
          PARAMETER_1             = '01'

    IMPORTING
          EMERGENCY_FLAG          = FLAG
          FILE_FORMAT             = FORMAT
          FILE_NAME               = FNAME

    EXCEPTIONS
          FILE_NOT_FOUND          = 1
          OTHERS                  = 2.

IF SY-SUBRC = 0.
  WRITE: /  'Flag     :', FLAG,
         / 'Format    :', FORMAT,
         / 'Phys. Name:', FNAME.
ENDIF.

此程序输出 如下:

HP-UX

FLAG      :

FORMAT    :BIN

Phys. Name: /tmp/TEST01

在此示例中 ,SAP 系统运行于 操作系统 HP-UX 之下,该操 作系统是 UNIX 语法组的成 员之一。如 同为 UNIX 语法组定义 的那样,逻 辑文件名 MYTEMP 和逻辑路径 TMP_SUB 一起转换为 物理文件名 /tmp/TEST01 。字段 FNAME 可用于以后 的程序流以 使用目录 /tmp 中的文件 TEST01 。

 

假定具有物 理文件名 TEST 的逻辑文件 名 EMPTY 与没有指定 物理路径的 逻辑路径连 接。如果在 上例中用‘ EMPTY’ 替换输出参 数‘MYTEMP’ ,则输出结 果如下:

HP-UX

FLAG      : X

FORMAT    :

Phys. Name: /usr/sap/S11/SYS/global/TEST

系统创建紧 急文件名, 其路径取决 于当前 SAP 系统的安装 。

 

 

使用演示服 务器上的文 件

要使用演示 服务器上的文件,请使用功能库中提供的特殊功能模块。必须使用内表格作为程序与功能模块之间的接口。下列主题说明:

物理文件名 取决于演示 服务器的操作系统。如同使用平台独 立的文件名 (页 12)所述,可以使用逻辑文件名编写平台相关的ABAP/4 程序。

 

通过用户对 话向演示服 务器写入数 据

要通过用户 对话从内表 格向演示服务器写入数据,请使用功能模块DOWNLOAD。 最重要的参 数列表如下。有关详细信息,参见事务SE37 中的功能模块文档。

重要输入参 数

参数

功能

BIN_FILESIZE

二 进制文件长 度

CODEPAGE

仅 用于在 DOS 中下载:值 IBM

FILENAME

文 件名(用户 对话的默认 值)

FILETYPE

文 件类型(用 户对话的默 认值)

ITEM

用 户对话窗口 标题

MODE

写 入模式(‘ empty’ = 改写,‘A’ = 追加)

用 FILETYPE 可指定传输模式。可能值有:

       BIN

二进制文件 :必须指定 文件长度, 并且内表格 必须包含有 数据类型 X 的一列。

       ASC

ASCII 文件.

       DAT

Excel 文件:列由 定位符分隔 ,行由回车 符和换行码 分隔。

       WK1

Excel 文件和 Lotus 文件:数据 将写入 WK1 电子表格。

重要输出参 数

参数

功能

ACT_FILENAME

文 件名(在用 户对话期间 输入)

ACT_FILETYPE

文 件类型(在 用户对话期 间输入)

FILESIZE

传 输字节数

表 格参数

参数

功能

DATA_TAB

内 部源表格

例 外参数

参数

功能

INVALID_FILESIZE

无 效参数 BIN_FILESIZE

INVALID_TABLE_WIDTH

无 效表格结构

 INVALID_TYPE

参 数 FILETYPE 无效值

 

 

假定表示所 用的操作系 统是 WINDOWS NT 并假定下列 程序:

PROGRAM SAPMZTST.

DATA: FNAME(128), FTYPE(3), FSIZE TYPE I.

TYPES: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
       END OF LINE.

TYPES ITAB TYPE LINE OCCURS 10.

DATA: LIN TYPE LINE,
      TAB TYPE ITAB.

DO 5 TIMES.
   LIN-COL1 = SY-INDEX.
   LIN-COL2 = SY-INDEX ** 2.
   APPEND LIN TO TAB.
ENDDO.

CALL FUNCTION 'DOWNLOAD'

    EXPORTING
        CODEPAGE            = 'IBM'
        FILENAME            = 'd:\temp\saptest.xls'
        FILETYPE            = 'DAT'
        ITEM                = 'Test for Excel File'

    IMPORTING
        ACT_FILENAME        = FNAME
        ACT_FILETYPE        = FTYPE
        FILESIZE            = FSIZE

    TABLES
        DATA_TAB            = TAB

    EXCEPTIONS
        INVALID_FILESIZE    = 1
        INVALID_TABLE_WIDTH = 2
        INVALID_TYPE        = 3.

WRITE: 'SY-SUBRC:', SY-SUBRC,
     / 'Name    :', (60) FNAME,
     / 'Type    :', FTYPE,
     / 'Size    :', FSIZE.

启动程序后 ,将出现如 下用户对话 窗口:

 

在此窗口中 ,用户可更 改默认值。 在单击“确 定”后,系 统将从内表 格 TAB (已在程序 中填入数据 )向文件 d:\temp\saptest.xls 传送数据。 如果该文件 已经存在, 则系统询问 用户是否替 换此文件。 系统将在列 之间设置分 隔符,以及 在每行结尾 设置回车符 和换行。

此示例输出 如下:

SY-SUBRC:    0
Name    : d:\temp\saptest.xls
Type    : DAT
Size    :         27

在演示服务 器上可以从 Excel 打开 d:\temp\saptest.xls 文件。出现 如下 Excel 屏幕:

 

 

 

不通过用户 对话向演示 服务器写入 数据

在不使用用 户对话的情况下,要向演示服务器写入数据,请使用功能模块WS_DOWNLOAD 。最重要的 参数列表如 下。有关详细信息,参见事务SE37 中的功能模块文档。

重要输入参 数

参数

功能

BIN_FILESIZE

二 进制文件长 度

CODEPAGE

仅 在 DOS 中下载:值 IBM

FILENAME

文 件名

FILETYPE

文 件类型

MODE

写 模式(‘empty’ = 改写,‘A’ = 追加)

使用 FILETYPE 可以指定传 输模式。可 能值有:

       BIN

二进制文件 :必须指定 文件长度, 并且内表格 必须包含有 数据类型 X 的一列。

       ASC

ASCII 文件,系统 在每行之后 设置行结束 标志。

       DAT

Excel 文件:系统 用定位符分 隔列,用回 车符和换行 码分隔行。

       WK1

Excel 文件和 Lotus 文件:数据 将写入 WK1 电子表格。

输出参数

参数

功能

FILELENGTH

传 输字节数

表 格参数

参数

功能

DATA_TAB

内 部源表格

例 外参数

参数

功能

FILE_OPEN_ERROR

系 统不能打开 文件

FILE_WRITE_ERROR

系 统不能向文 件写入数据

 INVALID_FILESIZE

无 效的参数 BIN_FILESIZE

INVALID_TABLE_WIDTH

无 效的表格结 构

INVALID_TYPE

无 效的参数 FILETYPE 值

 

 

假定用于表 示的操作系 统是 WINDOWS NT 并假定下列 程序:

PROGRAM SAPMZTST.

DATA: FLENGTH TYPE I.

DATA TAB(80) OCCURS 5.

APPEND 'This is the first line of my text. 'TO TAB.
APPEND 'The second line.                  ' TO TAB.
APPEND '      The third line.              ' TO TAB.
APPEND  '          The fourth line.        ' TO TAB.
APPEND  '            Fifth and final line. ' TO TAB.

CALL FUNCTION 'WS_DOWNLOAD'

    EXPORTING
        CODEPAGE            = 'IBM'
        FILENAME            = 'd:\temp\saptest.txt'
        FILETYPE            = 'ASC'

    IMPORTING
        FILELENGTH          = FLENGTH

    TABLES
        DATA_TAB            = TAB

    EXCEPTIONS
        FILE_OPEN_ERROR     = 1
        FILE_WRITE_ERROR    = 2
        INVALID_FILESIZE    = 3
        INVALID_TABLE_WIDTH = 4
        INVALID_TYPE        = 5.

WRITE: 'SY-SUBRC   :', SY-SUBRC,
     / 'File length:', FLENGTH.

此示例输出 如下:

SY-SUBRC  :      0

File length:       140

系统将向 ASCII 文件 d:\temp\saptest.txt. 传输表格 TAB 的五行。使 用 WINDOWS“ 文件管理器 ”,如下所 示可以检查 文件的存在 及长度:

 

现在可以使 用演示服务 器上的任何 编辑器打开 文件。在下 示例中,使 用 DOS 编辑器:

 

 

 

通过用户对 话从演示服 务器中读取 数据

要通过用户 对话将数据 从演示服务器读取到给内表格中,请使用功能模块UPLOAD 。最重要的 参数列表如 下。有关详细信息,参见事务SE37 中的功能模块文档。

重要输入参 数

参数

功能

CODEPAGE

仅 在 DOS 中加载:值 IBM

FILENAME

文 件名(用户 对话默认值 )

FILETYPE

文 件类型(用 户对话默认 值)

ITEM

用 户对话窗口 标题

使用 FILETYPE 可以指定传输模式。可能值有:

       BIN

二进制文件 。

       ASC

ASCII 文件:具有 行结束标志 的文本文件 。

       DAT

作为文本文 件保存的 Excel 文件,列由 定位符分隔 ,行由回车 符和换行码 分隔。

       WK1

作为 WK1 电子表格保 存的 Excel 文件和 Lotus 文件。

重要输出参 数

参数

功能

FILESIZE

传 输字节数

ACT_FILENAME

文 件名(在用 户对话期间 输入)

ACT_FILETYPE

文 件类型(在 用户对话期 间输入)

表 格参数

参数

功能

DATA_TAB

内 部目标表格

 例外参数

参数

功能

CONVERSION_ERROR

在 数据转换中 的错误

INVALID_TABLE_WIDTH

无 效的表格结 构

INVALID_TYPE

不 正确参数 FILETYPE

 

 

 

假定用于表 示的操作系 统是 WINDOWS NT 并假定如下 Excel 表格:

 

如果此表格 作为文本文 件(列之间 有定位符) 保存到 d:\temp\mytable.tab, 则下列程序 可以读取表 格:

PROGRAM SAPMZTST.

DATA: FNAME(128), FTYPE(3), FSIZE TYPE I.

TYPES: BEGIN OF LINE,
         COL1(10) TYPE C,
         COL2(10) TYPE C,
         COL3(10) TYPE C,
       END OF LINE.

TYPES ITAB TYPE LINE OCCURS 10.

DATA: LIN TYPE LINE, 
      TAB TYPE ITAB.

CALL FUNCTION 'UPLOAD'

    EXPORTING
          CODEPAGE            = 'IBM'
          FILENAME            = 'd:\temp\mytable.tab'
          FILETYPE            = 'DAT'
          ITEM                = 'Read Test for Excel File'

    IMPORTING
          FILESIZE            = FSIZE
          ACT_FILENAME        = FNAME
          ACT_FILETYPE        = FTYPE

    TABLES
          DATA_TAB            =  TAB

    EXCEPTIONS
          CONVERSION_ERROR    = 1
          INVALID_TABLE_WIDTH = 2
          INVALID_TYPE        = 3.

WRITE: 'SY-SUBRC:', SY-SUBRC,
     / 'Name    :', (60) FNAME,
     / 'Type    :', FTYPE,
     / 'Size    :', FSIZE.

SKIP.
LOOP AT TAB INTO LIN.
   WRITE: / LIN-COL1, LIN-COL2, LIN-COL3.
ENDLOOP.

在启动此程 序后,将出 现用户对话 窗口:

 

在此窗口中 ,用户可以 更改默认值 。单击“确 定”后,系 统将数据从 文件 d:\temp\mytable.tab 传输到内表 格 TAB 。

此示例输出 如下:

SY-SUBRC:    0
Name    : d:\temp\mytable.tab
Type    : DAT
Size    :         69

Billy     the        Kid
My         Fair       Lady
Herman     the        German
Conan      the        Barbarian

内表格 TAB 的内容等于 初始 Excel 表格的内容 。

 

不通过用户 对话从演示 服务器中读 取数据

不通过用户 对话,要将 数据从演示服务器读取到内表格,请使用功能模块WS_UPLOAD 。最重要的 参数列表如 下。有关详细信息,参见事务SE37 中的功能模块文档。

重要输出参 数

参数

功能

CODEPAGE

仅 在 DOS 中下载:值 IBM

FILENAME

文 件名

FILETYPE

文 件类型

使用 FILETYPE 可以指定传 输模式。可 能值有:

       BIN

二进制文件 。

       ASC

ASCII 文件:具有 行结束标志 的文本文件 。

       DAT

作为文本文 件保存的 Excel 文件,列由 定位符分隔 ,行由回车 符和换行码 分隔。

       WK1

作为 WK1 电子表格保 存的 Excel 文件和 Lotus 文件。

输出参数

参数

功能

FILELENGTH

传 输字节数

表 格参数

参数

功能

DATA_TAB

内 部目标表格

 例外参数

参数

功能

CONVERSION_ERROR

在 数据转换中 的错误

FILE_OPEN_ERROR

系 统不能打开 文件

FILE_READ_ERROR

系 统不能从文 件中读取数 据

INVALID_TABLE_WIDTH

无 效的表格结 构

INVALID_TYPE

无 效的参数 FILETYPE 值

 

 

假定用于表 示的操作系 统是 WINDOWS NT 并假定如下 文本文件:

 

下列程序将 读取该文本 文件:

PROGRAM SAPMZTST.

DATA: FLENGTH TYPE I.

DATA: TAB(80) OCCURS 5 WITH HEADER LINE.

CALL FUNCTION 'WS_UPLOAD'

    EXPORTING
          CODEPAGE            = 'IBM'
          FILENAME            = 'd:\temp\mytext.txt'
          FILETYPE            = 'ASC'

    IMPORTING
          FILELENGTH          = FLENGTH

    TABLES
          DATA_TAB            = TAB

    EXCEPTIONS
          CONVERSION_ERROR    = 1
          FILE_OPEN_ERROR     = 2
          FILE_READ_ERROR     = 3
          INVALID_TABLE_WIDTH = 4
          INVALID_TYPE        = 5.

WRITE: 'SY-SUBRC:', SY-SUBRC,
     / 'Length  :', FLENGTH.

SKIP.
LOOP AT TAB.
  WRITE: / TAB.
ENDLOOP.

此示例输出 如下:

 

 

 

 

检查演示服 务器上的文 件

要获取演示 服务器上的 文件和演示服务器操作系统的信息,请使用功能模块WS_QUERY 。最重要的 参数列表如 下。有关详细信息,参见事务SE37 中的功能模块文档。

重要输入参 数

参数

功能

FILENAME

查 询命令‘FE’ 、‘FL’ 、和‘DE’ 的文件名

QUERY

查 询命令

输入 参数QUERY 定义查询命令。一些重要查询命令列表如下:

       CD:查 询当前目录

       EN:查 询环境变量

       FL:查 询用 FILENAME 指定文件的 长度

       FE:查 询用 FILENAME 指定文件的 存在性

       DE:查 询用 FILENAME 指定目录的 存在性

       WS:查 询演示服务 器的窗口系 统

       OS:查 询演示服务 器的操作系 统

输出参数

参数

功能

RETURN

查 询结果(‘ 0’表示‘ no’,‘ 1’表示‘ yes’)

 例外参数

参数

功能

INV_QUERY

QUERY 或 FILENAME 的错误值

 

 

假定用于表 示的操作系 统是 WINDOWS NT,并假 定文件 SYSTEM.INI 存在(如下 所示):

 

下述程序决 定操作系统 及此文件的 属性:

PROGRAM SAPMZTST.

DATA: FNAME(60), RESULT(30), FLENGTH TYPE I.

FNAME = 'C:\WINNT35\SYSTEM.INI'.

CALL FUNCTION 'WS_QUERY'
     EXPORTING
          QUERY       = 'OS'
     IMPORTING
          RETURN      = RESULT
     EXCEPTIONS
          INV_QUERY   = 1.

IF SY-SUBRC = 0.
  WRITE: / 'Operating System:', RESULT.
ENDIF.

CALL FUNCTION 'WS_QUERY'
     EXPORTING
          QUERY       = 'WS'
     IMPORTING
          RETURN      = RESULT
     EXCEPTIONS
          INV_QUERY   = 1.

IF SY-SUBRC = 0.
  WRITE: / 'Windows:', RESULT.
ENDIF.

CALL FUNCTION 'WS_QUERY'
     EXPORTING
          FILENAME    = FNAME
          QUERY       = 'FE'
     IMPORTING
          RETURN      = RESULT
     EXCEPTIONS
          INV_QUERY   = 1.

IF SY-SUBRC = 0.
  WRITE: / 'File exists ?', RESULT.
ENDIF.

CALL FUNCTION 'WS_QUERY'
     EXPORTING
          FILENAME    = FNAME
          QUERY       = 'FL'
     IMPORTING
          RETURN      = FLENGTH
     EXCEPTIONS
          INV_QUERY   = 1.

IF SY-SUBRC = 0.
  WRITE: / 'File Length:', FLENGTH.
ENDIF.

此程序输出 如下:

Operating System: NT

Windows: WN32

File exists ? 1

File Length:       210

WN32 窗口系统是 WINDOWS NT 的窗口系统 。关于缩写 的详细信息 ,请将光标 放在功能模 块文档屏幕 的 QUERY 字段上并选 择“帮助” 

SAP ABAP服务器端文件处理实战:从逻辑文件到OPEN DATASET的完整指南 本文详细介绍了SAP ABAP服务器端文件处理的实战技巧,重点解析了从逻辑文件配置到OPEN DATASET操作的全流程。通过实际案例演示了如何解决中文编码、权限管理等常见问题,并提供了CSV文件导入导出的完整实现方案,帮助开发者掌握高效、可靠的ABAP文件处理方法。 阅读详情

相关推荐

ABAP 读取EXCEL数据到内表

ABAP 读取EXCEL 到内表 本文实例演示 使用到的函数 WS_FILENAME_GET —显示文件路径 TEXT_CONVERT_XLS_TO_SAP —读取excl数据到内表 以公司工厂为例子 tables:t001,t001w. types:begin of ty_exl, bukrs like t001-bukrs, "公司代码 werks like...

qq_35332609的博客 2895

SAP ABAP 通过OPEN DATASET语法上传文件到服务器

SAP ABAP OPEN DATASET AL11 SM69

dongxiaosheng的博客 3086

如何使用 ABAP 代码解析 XML 文件

XML 格式是 SAP 实际项目集成中经常使用到的一种数据格式,比如 SAP ABAP OData 服务,支持 XML 和 JSON 两种数据格式。本文介绍了如何使用 ABAP DOM API 将本地 XML 文件进行解析,以及必要的出错处理机制的实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2590

服务器端文件处理 open dataset

如果只指定文件名而没有指定文件路径,则默认会使用系统属性参数DIR_HOME: 跨平台的文件路径 如果想要指定跨平台的文件名,则使用FILE_GET_NAME函数,该函数会将逻辑文件名与逻辑文件路径转换成服务器所运行的平台下的物理文件名与路径,但逻辑文件名与路径需要使用FILE事务码先来定义。 FILE_GET_NAME:能将SAP中通过FILE事务码定义的与操作系统无关(platform-independent)逻辑文件名转换成与平台相关的物理文件名。逻辑文件名通过下面的FILE事务码来配.

ChampaignWolf的专栏 4737

使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 ABAP 服务器并进行解析

这是 Jerry 2021 年的第 71 篇文章,也是汪子熙公众号总共第 348 篇原创文章。 Jerry 之前发布过一篇文章 不使用任何框架,手写纯 JavaScript 实现上传本地文件到 ABAP 服务器,之后不少朋友留言,提出的问题概括为以下两类: (1) 客户端通过 multipart/form-data 格式发送的数据,ABAP 端除了像 Jerry 文章采取字符串解析这种比较繁琐的方式处理外,还有其他方法吗? (2) 能否上传二进制文件比如 Excel 到 ABAP 并进行解析?

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2252

如何使用 ABAP 将本地 PDF 文件中的文本内容提取出来?

因此,面对我交给 ChatGPT 的用 ABAP 移植 pdf-parse 的任务,ChatGPT 选择了"消极怠工",仅仅只把这个 Node.js 库的几个入口方法,在 ABAP 里创建了对应的类方法,但是方法实现留空,可以说是实现了个寂寞。Node.js 的 pdf-parse 功能更加强大,除了提取文本之外,也成功将该 PDF 文件的元数据解析出来了,比如 PDF 格式版本号 1.4,使用有道云笔记桌面版(ynote-desktop)创建,以及创建和修改时间戳。幸运的是,我们不需要重复造轮子。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 599

ABAP - 在报表中使用模板文件

在制作报表的时候,经常需要基于 Excel 的模板文件来编制。可以把 Excel 模板文件上传到应用程序服务器上。本篇博文演示如何将文件上传,在 ABAP 代码中从 application server 下载到本地,并且通过 OLE 操作本地文件。 上传模板文件 通过事务码 SMW0 上传本地的文件。在初始界面中,选择 「Binary Data for …」,然后点击 「Find」按钮: 进入下一屏幕,在 Package 字段输入开发包,选择开发包方便以后对文件的查找。 按 F8 执行,点击「创建」按钮

王敏的专栏 1544

使用 ABAP + OLE 消费 Windows DLL 文件里的代码和服务

但是,ABAP 不直接支持 DLL 的消费,因此需要借助其他语言(如 VBScript 或 C#)创建一个 OLE 对象,然后在 ABAP 中调用这个 OLE 对象。在 SAP ABAP 中,我们可以使用 OLE (Object Linking and Embedding) 技术来实现对 Windows DLL 文件的代码和服务的消费。在 Visual Basic、C# 或其他支持 OLE 的语言中,创建一个 OLE 对象,该对象封装了 DLL 的函数调用。在 ABAP 中,我们使用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 340

ABAP使用HTTP POST FORM二进制文件

ABAP 使用HTTP POST FORM二进制文件

hexi99999的博客 1190

不使用任何框架,手写纯 JavaScript 实现上传本地文件到 ABAP 服务器

这是 Jerry 2021 年的第 69 篇文章,也是汪子熙公众号总共第 346 篇原创文章。 采用 SAP UI5 sap.ui.unified.FileUploader 控件,结合 Gateway 框架,实现本地文件上传到 ABAP 服务器,不是一件困难的事情。 但由于项目实施的客观条件限制,如果不使用 SAP UI5 和 SAP ABAP Gateway 这两个框架,又该如何实现呢? 这是最近一个朋友咨询我的问题。实际上我早在 2014 年就做过类似的事情。本文介绍不使用 SAP UI5 和 SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 907

28. 如何使用 SAP OData 服务向 ABAP 服务器上传文本格式和 Excel,PDF 等格式的文件

既然是支持文件上传,那么当然首先要在 ABAP 服务器开发一个自定义数据库表了,我们取名为 ZFILE. 这个数据库表的结构如下图,我们设计了文件内容,文件创建日期和时间,文件的二进制内容以及文件的 mime type 等五个字段。同时创建一个名为 ZTS_FILE 的 ABAP 结构,用来作为即将新建的 OData File 节点的数据结构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2088

ABAP使用OLE2对象创建EXCEL文件

厌倦了总是下载一模一样的EXCEL文档?没有颜色,边框,有效性验证.... 让我们看看怎样用OLE2对象来创造可爱的EXCEL工作表吧!(效果如下) 首先你需要知道微软EXCEL中的不同部分的名称,每个部分在我们的程序中都代表一个OLE2对象 本文地址:http://www.cnblogs.com/hhelibeb/p/5787396.html 原文地址:Using ...

weixin_30323631的博客 747

深入MoveIt与OMPL集成开发:从源码编译到自定义规划算法实战

本文详细介绍了如何从源码编译集成MoveIt与OMPL,并实现自定义规划算法的完整流程。通过清理环境、获取源码、解决编译依赖与错误,最终指导开发者创建并集成名为MyRRT的自定义规划算法,从而实现对机器人运动规划栈的深度定制与优化。

h0i1j2k3l的博客 468

【亲测免费】 VSCode ABAP远程文件系统插件使用指南

VSCode ABAP远程文件系统插件使用指南 项目介绍 VSCode ABAP远程文件系统是一款专为ABAP开发者设计的Visual Studio Code扩展,版本号为1.7.11。该插件由Marcello Urbani开发并维护,遵循MIT许可协议。它允许开发者直接在Visual Studio Code中工作于部署在服务器上的ABAP代码,实现了远程文件系统的功能。通过这个插件,用户可以便捷...

gitblog_00941的博客 1399

C++游戏开发实战:从零构建局域网联机对战系统(附完整代码解析)

本文详细介绍了如何使用C++开发局域网联机对战游戏系统,涵盖从环境搭建到实战代码解析的全过程。重点讲解了Winsock库的应用、Socket通信原理、服务端与客户端开发技巧,以及性能优化和安全防护方案,帮助开发者快速掌握C++游戏开发的核心技术。

weixin_42524945的博客 445

NRF52832调试方法1——HardFault_Handler问题定位

一、遇到问题 keil debug模式下,直接点击全速运行(Run)发现程序卡死,点击stop按钮后,停到了HardFault_Handler位置,如下图所示。 此时使用navigate backwards(蓝色左箭头)是无效的,找不到程序卡在哪里。 二、解决办法 此时首先观察register窗口 若Stack为MSP,则复制R13(SP)的值到memory观察窗的地址搜索栏。每一行显示连续的28个地址上的存储信息,每个地址上存有一个字节。 从第21个位置起的连续四个字节是LR的值,

小梁的博客 3650

使用ABAP和JavaScript代码生成PDF文件的几种方式

ABAP 方法1:使用ABAP + Adobe Lifecycle Enterprise Service 详细步骤参考我的博客Convert word document into PDF via Adobe Livecycle Enterprise service 方法2:使用ABAP Webdynpro里的InteravtiveForm控件 + Adobe Form Template 详...

weixin_34381666的博客 91

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2402
上一篇: CRM Badi
下一篇: ABAPプログラム開発において使用実績のある汎用モジュール一覧
Footloose_
博客等级 码龄10年 254粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值