ABAP使用文件
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 | 用 此標志可決 定是否輸入 顯示服務器 的操作系統 而不是由參 數 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 字段上并選 擇“幫助” 。
轉載于:https://www.cnblogs.com/wangxiaowen/p/8992901.html
總結
- 上一篇: Python实用笔记 (2)list和t
- 下一篇: postgres安装02--postgi