ABAP使用文件
ABAP/4 允許使用應(yīng) 用服務(wù)器或演示服務(wù)器上的順序文件。
例如,這些 文件可以用 作數(shù)據(jù)的臨時存儲設(shè)備或本地程序與SAP 系統(tǒng)的接口。
使用應(yīng)用服 務(wù)器上的文 件
ABAP/4提供一些語句,以使用存儲在應(yīng)用服務(wù)器順序文件中而不是存儲在數(shù)據(jù)庫中的數(shù)據(jù)。下列主題說明:
文件和文件 路徑的物理 定址是與平臺相關(guān)的。R/3 系統(tǒng)提供了 允許使用平臺相關(guān)文件名的功能模塊和事務(wù):
?
ABAP/4 的文件處理
ABAP/4 提供了三種 文件處理語 句:
?????? ?OPEN DATASET 語句用于打 開文件
?????? ?CLOSE DATASET 語句用于關(guān) 閉文件
?????? ?DELETE DATASET 語句用于刪 除文件
?
打開文件
要在應(yīng)用服 務(wù)器上打開 文件,請使 用 OPEN DATASET 語句。關(guān)于OPEN DATASET 語句的基本 形式說明, 參見:
OPEN DATASET 語句的基本 形式 (頁 a)
OPEN DATASET 語句有若干個包括大量任務(wù)選項。可以:
關(guān)于其他選 項的詳細信 息,參見OPEN DATASET 語句的關(guān)鍵 字文檔。
?
OPEN DATASET 語句的基本 形式
要在應(yīng)用服 務(wù)器上打開 文件,請如 下使用 OPEN DATASET 語句:
語法
OPEN DATASET <dsn>[options].
此語句打開 文件 <dsn> 。如果不指 定任何模式 選項,則文 件將按二進 制模式打開 (參見下述 主題)。如 果系統(tǒng)不能打開文件,則將系統(tǒng)字段SY-SUBRC 設(shè)置為 0,否則SY-SUBRC 返回 8。
可以將文件 名<dsn> 指定為字母 或包含文件 名的字段。如果未指定路徑,則系統(tǒng)將在應(yīng)用服務(wù)器上SAP 系統(tǒng)運行的目錄中打開文件。要打開文件,運行SAP 系統(tǒng)的用戶必須在操作系統(tǒng)級有相應(yīng)的權(quán)限。
?
文件名是平 臺相關(guān)的。 必須根據(jù)運 行 SAP 系統(tǒng)的操作 系統(tǒng)規(guī)則指 定文件名或 路徑。要編 寫與操作系 統(tǒng)中不相關(guān) 的程序,可 以使用邏輯 文件名(關(guān) 于邏輯文件 名的詳細信 息,參見使用平臺獨 立的文件名 (頁 l))。
?
DATA FNAME(60).
FNAME = '/tmp/myfile'.
OPEN DATASET 'myfile'.
OPEN DATASET FNAME.
如果 SAP 系統(tǒng)在 UNIX 系統(tǒng)下運行 ,則此示例 可以運行。 此程序在運 行 SAP 系統(tǒng)的目錄 中以及在“ /tmp” 路徑中打開 文件“myfile” 。對于其它 操作系統(tǒng), 必須替換其 它文件名。 例如,對 OpenVMS 系統(tǒng),可以 指定下述內(nèi) 容:
FNAME = '[TMP]myfile.BIN'
OPEN DATASET 'myfile.BIN'.
?
?
接受操作系 統(tǒng)消息
嘗試打開文 件后,要接 受操作系統(tǒng) 消息,請如 下使用 OPEN DATASET 語句的 MESSAGE 選項:
語法
OPEN DATASET <dsn>MESSAGE <msg>.
系統(tǒng)將在變 量 <msg> 中放置相關(guān) 的操作系統(tǒng) 消息。
要進行錯誤 處理,請與 系統(tǒng)字段一 起使用此選 項。
?
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 系統(tǒng)在 UNIX 下運行且不 存在“hugo.xyz” 文件,則此 示例輸出如 下:
?
?
打開文件讀 取
要打開文件 進行讀訪問 ,請如下使 用 OPEN DATASET 語句的 FOR INPUT 選項:
語法
OPEN DATASET <dsn> FORINPUT.
此語句打開 文件用于讀 取。文件必須已經(jīng)存在,否則系統(tǒng)將SY-SUBRC 設(shè)置為 8 并且忽略此命令。
如果文件已 打開(可能 用于讀、寫、或追加),系統(tǒng)將復(fù)位到文件的起始位置。但是在重新打開文件之前使用CLOSE 語句是良好的編程風(fēng)格(關(guān)于關(guān)閉文件的詳細信息,參見關(guān)閉文件 (頁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.
此語句打開 文件用于寫 入。如果文 件不存在, 則創(chuàng)建文件 。如果文件已存在但處于關(guān)閉狀態(tài),則刪除其內(nèi)容。如果文件已存在且已打開(可能為讀、寫、或追加),則復(fù)位到文件的起始位置。如果系統(tǒng)可以打開文件,則SY-SUBRC 設(shè)置為 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 系統(tǒng)在UNIX 下運行,此 示例輸出如 下:
?
系統(tǒng)不能打 開該文件, 因為它是目 錄。
?
下列程序?qū)?演示當(dāng)打開 文件用于寫 入時其位置 如何設(shè)置。 但在重新打 開已打開文 件之前使用 CLOSE 語句是良好 的編程風(fēng)格 (關(guān)于關(guān)閉 文件的詳細 信息,參見關(guān)閉文件 (頁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 個整數(shù)填寫 (關(guān)于 TRANSFER 語句的詳細 信息,參見 向文件中寫 入數(shù)據(jù) (頁 i) )。
3.??? 同時 打開以讀取 ,這將復(fù)位 到文件的起 始位置。
4.??? 被讀 入字段 NUM(關(guān) 于 READ DATASET 語句的詳細 信息,參見 從文件中讀 取數(shù)據(jù) (頁 k) )。NUM 的值寫到輸 出屏幕。
5.??? 重新 打開以寫入 。這將復(fù)位 到文件的起 始處位置。
6.??? 用 5 個整數(shù)填寫 。這些整數(shù) 將改寫文件 的以前內(nèi)容 。
7.??? 重新 打開以讀取 。這將復(fù)位 到文件的起 始位置。
8.??? 被讀 入字段 NUM。NUM 的值將寫到 輸出屏幕。
9.??? 關(guān)閉 (關(guān)于 CLOSE DATASET 語句的詳細 信息,參見 關(guān)閉文件 (頁 h) )。
10.? 重 新打開以寫 入。這將刪 除現(xiàn)有文件 的內(nèi)容。
11.? 用 5 個整數(shù)填寫 。
12.? 同 時被打開以 讀取。這將 復(fù)位到文件 的起始位置 。
13.? 被 讀入字段 NUM。NUM 的值將寫到 輸出屏幕。
?
?
打開文件追 加
要打開文件 追加數(shù)據(jù), 請如下使用 OPEN DATASET 語句的 FOR APPENDING 選項:
語法
OPEN DATASET <dsn> FORAPPENDING.
此語句打開 文件在文件 末尾寫入數(shù)據(jù)。如果文件不存在,則創(chuàng)建文件。如果文件已存在但處于關(guān)閉狀態(tài),系統(tǒng)將打開文件并定位到文件末尾。如果文件已存在且已打開(可能為讀、寫、或追加),將定位設(shè)置到文件末尾。SY-SUBRC總是返回0。
?
在再次打開 已經(jīng)打開的 文件之前使 用 CLOSE 語句是良好 的編程風(fēng)格 (關(guān)于關(guān)閉 文件的詳細 信息,參見 關(guān)閉文件 (頁 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 中的五個整 數(shù)填寫(關(guān) 于 TRANSFER 語句的詳細 信息,參見 向文件中寫 入數(shù)據(jù) (頁i))。下一語 句 OPEN DATASET 將復(fù)位到起 始位置,然 后打開文件 以追加并且 定位設(shè)置到 末尾位置。 10~ 50 的五個整數(shù) 將寫入文件 。最后讀取 文件內(nèi)容并 寫到屏幕。
?
?
指定二進制 模式
要用二進制 模式處理文 件,請如下 使用 OPEN DATASET 語句中的 IN BINARY MODE 選項:
語法
OPEN DATASET <dsn> IN BINARY MODE [FOR....].
如果從以二 進制模式打 開的文件中讀取數(shù)據(jù)或向此類文件中寫入數(shù)據(jù),則系統(tǒng)將逐字節(jié)地傳輸數(shù)據(jù)。在傳輸期間,系統(tǒng)不解釋文件內(nèi)容。在將文件內(nèi)容寫入到另一文件時,系統(tǒng)將傳輸源文件的所有字節(jié)。在從文件讀取數(shù)據(jù)到字段時,傳輸?shù)淖止?jié)數(shù)目取決于目標(biāo)字段大小。在讀取之時或之后,可以用其它ABAP/4 語句給目標(biāo) 字段定址, 系統(tǒng)將根據(jù)數(shù)據(jù)類型解釋字段內(nèi)容。
?
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
在按二進制 模式為寫入 數(shù)據(jù)而打開 文件“myfile” 后,將字段 NUM1 和 TEXT1 的內(nèi)容寫入 文件(關(guān)于 TRANSFER 語句的詳細 信息,參見向文件中寫 入數(shù)據(jù) (頁 i))。然后打 開文件以讀 取并且其全 部內(nèi)容傳輸 到字段 TEXT2 (關(guān)于 READ DATASET 語句的詳細 信息,參見從文件中讀 取數(shù)據(jù) (頁 k) )。字符串 TEXT2 的前四位沒 什么意義, 因為各字節(jié) 是整數(shù) 111 表示法(平 臺相關(guān))。 系統(tǒng)企圖將 所有字節(jié)解 釋為字符, 但此解釋工 作只對后四 個字節(jié)有效 。在用 OPEN 語句復(fù)位位 置之后,文 件的前四個 字節(jié)將讀入 NUM2 。因為 NUM2 與 NUM1 的值有相同 的數(shù)據(jù)類型 ,所以 NUM2 的值有意義 。最后,將 文件的八個 字節(jié)逐字節(jié) 地從 HEX 的屏幕輸出 讀入到 HEX 字段中,可 以看到實際 文件內(nèi)容十 六進制表示 法。后四個 字節(jié)為字 TEXT 中字符的 ASCII 表示法。
?
指定文本模 式
要用文本模 式處理文件 ,請如下使用OPEN DATASET 語句的 TEXT MODE 選項:
語法
OPEN DATASET <dsn> FOR.... IN TEXT MODE.
如果從以文 本模式打開 的文件中讀 取數(shù)據(jù)或向 此類文件中 寫入數(shù)據(jù), 數(shù)據(jù)將逐行 傳輸。系統(tǒng)假定文件為行結(jié)構(gòu)。
?????? 對于每個 TRANSFER 語句(關(guān)于 TRANSFER 語句的詳細 信息,參見 向文件中寫 入數(shù)據(jù) (頁 i) ),系統(tǒng)向 文件中傳輸 除結(jié)尾空白 之外的所有 字節(jié),并在 其后作行結(jié) 束標(biāo)記。
?????? 對于每個 READ DATASET 語句(關(guān)于 READ DATASET 語句的詳細 信息,參見 從文件中讀 取數(shù)據(jù) (頁 k) ),系統(tǒng)將 讀取下一個 行結(jié)束標(biāo)記 之前的所有 數(shù)據(jù)。如果 目標(biāo)字段太 小,則截斷 行的多余部 分。如果目 標(biāo)字段長于 一行,則右 邊各位填入 空格。
如果要將字 符串寫入文 件或已知現(xiàn)存文件是基于行的格式,則應(yīng)使用文本模式。例如,使用文本模式,可以讀取在應(yīng)用服務(wù)器上用專用文本編輯器創(chuàng)建的文件。
?
為運行在 UNIX 系統(tǒng)(使用 ASCII 表示法)下 的 SAP 系統(tǒng)寫入如 下演示程序 。
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 讀入存儲行 。第一行從 右端開始填 入兩個空格 ,第二行的 后五位被截 斷。以二進 制模式打開 文件并將其 讀入十六進 制字段,表 明其實際結(jié) 構(gòu):在 31 ~ 36 之間的數(shù)是 數(shù)值字符 1 ~ 6 的 ASCII 表示法, 20 表示空格字 符,在每行 結(jié)尾標(biāo)有 0A 標(biāo)記。注意 :字符串文 字的結(jié)尾空 格不寫入文 件。
在指定位置 打開文件
要在指定位 置打開文件 ,請如下使 用 OPEN DATASET 語句的 AT POSITION 選項:
語法
OPEN DATASET <dsn> [FOR ....] [IN ...MODE] AT POSITION <pos>.
此語句打開 文件<dsn> 并為讀寫數(shù) 據(jù)定位位置<pos>, 該位置從文 件起始處起按字節(jié)計算。在文件起始處以前,不能指定位置。
以二進制模 式工作時, 指定位置<pos> 相當(dāng)有用, 因為文本文 件的物理表示法取決于操作系統(tǒng)。
?
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 整除,為寫 入或讀取整 數(shù)而指定位 置相當(dāng)有用 。
?
?
?
關(guān)閉文件
要在應(yīng)用服 務(wù)器上關(guān)閉 文件,請如 下使用 CLOSE DATASET 語句:
語法
CLOSE DATASET <dsn>.
此語句關(guān)閉 文件<dsn> 。文件命名 在打開文件 (頁 1) 中有說明。
只有在下次 為寫入打開 文件(詳細信息和示例,參見打開文件寫 入 (頁 3) )期間要刪除文件內(nèi)容時,關(guān)閉文件才有必要。
?
為避免錯誤 并使程序易 于閱讀,在 使用下一條 OPEN DATASET 語句之前應(yīng) 關(guān)閉文件。 通過 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 語句在此示 例中沒有必 要,但它可 以改善程序 格式。
?
?
?
刪除文件
要在應(yīng)用服 務(wù)器上刪除 文件,請如 下使用 DELETE DATASET 語句:
語法
DELETE DATASET <dsn>.
此語句刪除 文件<dsn> 。文件命名 在打開文件 (頁 1) 中有說明。
如果系統(tǒng)可 以刪除文件 <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” 不存在,則 在打開文件 以寫入時創(chuàng) 建該文件。 當(dāng)打開文件 以寫入時, 系統(tǒng)不能查 找此文件。 在 DELETE DATASET 語句之后, 系統(tǒng)不再查 找文件。
向文件中寫 入數(shù)據(jù)
要向在應(yīng)用 服務(wù)器上的 文件寫入數(shù) 據(jù),請如下 使用 TRANSFER 語句:
語法
TRANSFER <f> to<dsn> [LENGTH <len>].
此語句將字 段 <f> 的值寫入文 件 <dsn> 。可以用 OPEN DATASET 語句指定傳 輸模式。如果不能打開文件以寫入,則系統(tǒng)將嘗試用二進制模式打開文件,或為此文件使用OPEN DATASET 語句的選項 。但是只用OPEN DATASET 語句打開文 件是良好的 編程風(fēng)格。OPEN DATASET 語句和文件 命名在打開文件 (頁 1) 中有說明。字段<f> 的數(shù)據(jù)類型 可以是基本 型,或者是不包含作為組件的內(nèi)表格的字段字符串。內(nèi)表格不能在一次執(zhí)行中寫入文件。
通過 LENGHT 選項,可以 指定傳輸數(shù)據(jù)的長度<len> 。系統(tǒng)將第 一個<len> 字節(jié)寫入文 件。如果<len> 太小,則截 斷超出的字 節(jié)。如果<len> 太大,系統(tǒng) 將在傳輸行 的右端各位填入空格。
?
下列程序?qū)?演示如何向 文件中寫入 內(nèi)表格:
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 創(chuàng)建字段字 符串 LIN 與內(nèi)表格 TAB。在 填完內(nèi)表格 TAB 之后,它將 逐行寫入文 件“ myfile ”。然后將 文件讀入字 段字符串 LIN 并將 LIN 內(nèi)容寫到輸 出屏幕。
?
為運行在 UNIX 系統(tǒng)(使用 ASCII 表示法)下 的 SAP 系統(tǒng)編寫如 下演示程序 。
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。通過將 文件逐字節(jié) 地讀入十六 進制字段, 可以看到如 何存儲文件 :數(shù)值 31 ~ 36 是數(shù)值字符 1 ~ 6 的 ASCII 表示法,20 代表空格并 且 0A 用作行結(jié)束 標(biāo)志。從 TEXT1 右端開始填 入兩個空格 ,并將 TEXT2 的兩個位置 截掉。
?
從文件中讀 取數(shù)據(jù)
要從應(yīng)用服 務(wù)器上的文 件中讀取數(shù) 據(jù),請如下 使用 READ DATASET 語句:
語法
READ DATASET <dsn> INTO<f> [LENGTH <len>].
此語句從文 件 <dsn> 中讀取數(shù)據(jù) 賦值給變量 <f> 。要決定把 從文件中讀取的數(shù)據(jù)賦值給哪個變量,必須清楚文件結(jié)構(gòu)。
可以用 OPEN DATASET 語句指定傳 輸模式。如 果沒有打開 文件以讀取 ,則系統(tǒng)將 嘗試以二進 制模式打開 文件或為此 文件使用 OPEN DATASET 語句的選項 。但是只用OPEN DATASET 語句打開文 件是良好的 編程風(fēng)格。OPEN DATASET 語句和文件 命名在打開文件 (頁 1) 中有說明。
在讀取操作 成功后,SY-SUBRC 將返回 0。當(dāng)?shù)轿?件末尾時, SY-SUBRC 將返回 4。當(dāng)不能打開文件時,SY-SUBRC 將返回 8。
如果以二進 制模式工作 ,則可以使用LENGTH 選項查找實 際傳輸給字 段<f> 的數(shù)據(jù)長度 。系統(tǒng)可用 變量<len> 值設(shè)置該長 度。
?
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 個字節(jié)填寫 文件“myfile” 。然后將讀 取 5 個字節(jié)賦值 給字段 TEXT2 。注意:在 到文件末尾 之后系統(tǒng)將 用空格填寫 TEXT2 的后三個字 節(jié),在字段 LENG 中給出實際 傳輸?shù)淖止?jié) 數(shù)。
如果以文本 模式工作, 可以使用LENGTH 選項查找文 件當(dāng)前行的 實際長度。系統(tǒng)將用變量<len> 值設(shè)置行長 度。為此, 系統(tǒng)將計算文件中從當(dāng)前位置到行結(jié)束標(biāo)志符之間的字節(jié)數(shù)。
?
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 系統(tǒng)的操作系統(tǒng)的要求。按特定文件名和路徑從ABAP/4 程序中創(chuàng)建 文件后,在 操作系統(tǒng)級登錄后,可發(fā)現(xiàn)此文件恰好位于該位置。
在各操作系 統(tǒng)之間,因 為文件和路徑的命名規(guī)則不同,除非如下使用工具,否則ABAP/4 程序就不能 從一個操作 系統(tǒng)移植到另一個操作系統(tǒng)。
要使程序可 以移植,SAP系統(tǒng)提供了邏輯文件名和邏輯路徑的概念。邏輯文件和路徑連接到物理文件和路徑。在特殊表格中建立這種連接。可以根據(jù)需要維護這些表格。在ABAP/4 程序中,請 使用功能模 塊FILE_GET_NAME 從邏輯文件 名中創(chuàng)建物 理文件名。
平臺獨立的 文件名維護 是定制的一部分。通過選擇“工具 -> 定制 -> 實現(xiàn)工程 -> 顯示完整的 IMG.”可以發(fā)現(xiàn)綜合說明。在出現(xiàn)的屏幕上,選擇“基礎(chǔ) -> 常規(guī)基礎(chǔ) -> 平臺獨立的 文件名分配”。
關(guān)于功能模 塊 FILE_GET_NAME 的說明,請 在“ABAP/4 功能庫:簡 介”屏幕上 輸入其名稱 并選擇文檔 。在出現(xiàn)的 屏幕上,單 擊“功能模塊文檔”。
下列主題提 供了關(guān)于如 何使用平臺獨立文件名的簡要概述。
首先解釋上 面提到的表 格維護,您將了解:
然后將了解 如何使用功 能模塊 FILE_GET_NAME 以將 ABAP/4 程序中的邏 輯文件名轉(zhuǎn) 換成物理文 件名。
?
?
維護語法組
語法組包含 所有操作系統(tǒng)(遵循相同的文件命名語法)的名稱。要顯示或創(chuàng)建語法組,請調(diào)用事務(wù)SF05 ,將出現(xiàn)下列屏幕:
?
在此屏幕上 ,可以看到 可用語法組的列表。如果需要,可通過單擊“新條目”定義新的語法組。關(guān)于如何將操作系統(tǒng)分配到語法組的詳細信息,參見將操作系統(tǒng) 分配到語法 組 (頁l)。
?
?
將操作系統(tǒng) 分配到語法 組
調(diào)用事務(wù)SF04 以顯示或維護操作系統(tǒng)到現(xiàn)有語法組的分配,將出現(xiàn)如下屏幕:
?
在此屏幕上 ,可以看到 當(dāng)前受支持的操作系統(tǒng)列表。要創(chuàng)建新條目,請單擊“新條目”。要將現(xiàn)有條目分配到語法組,請標(biāo)志操作系統(tǒng)并單擊“詳情”。將出現(xiàn)如下屏幕:
?
在此屏幕上 ,操作系統(tǒng)HP-UX 分配到語法組UNIX 。
?
創(chuàng)建和定義 邏輯路徑
每個邏輯文 件名都可與邏輯路徑連接。邏輯路徑給邏輯文件名提供平臺相關(guān)的物理路徑。要創(chuàng)建邏輯路徑,請調(diào)用事務(wù)SF02 。在出現(xiàn)的屏幕上,請選擇“新條目”并定義新的邏輯路徑,如下例所示:
?
通過選擇“ 保存”,保 存邏輯路徑。
調(diào)用事務(wù) SF03 以將現(xiàn)有邏輯路徑與物理路徑和語法組連接。在出現(xiàn)的屏幕上,請選擇邏輯路徑維護它與語法組的連接,或單擊“新條目”以創(chuàng)建新連接。例如,語法組UNIX 的物理路徑可按如下定義:
?
對于輸入字 段,可以使 用可能條目的“邏輯路徑和語法組”列表。要創(chuàng)建“物理路徑”,可使用運行時用當(dāng)前值替換的保留字(用尖括弧括起)。將光標(biāo)放在輸入字段上并選擇“幫助”,可以獲得保留字列表。在物理路徑中必須包括保留字<FILENAME> 。它的實際 值由使用邏 輯路徑的邏輯文件名定義。在當(dāng)前示例中使用的保留字<PARAM_1> 的實際值是 功能模塊FILE_GET_NAME 的輸入?yún)?shù) 。
?
?
創(chuàng)建和定義 邏輯文件名
要創(chuàng)建邏輯 文件名,請調(diào)用事務(wù)SF01 并在出現(xiàn)的屏幕上選擇“新條目”。定義邏輯文件名如下例所示:
?
如上所述, 既可以將邏 輯文件與邏輯路徑連接,也可以在輸入字段“物理文件”中輸入物理文件名全稱。在后一種情況下,邏輯文件名僅適用于一種操作系統(tǒng)。輸入完整物理文件的規(guī)則與為邏輯路徑定義物理路徑的規(guī)則相同。有關(guān)詳細信息和可能保留字的列表,請選擇“幫助”。
當(dāng)連接到邏 輯路徑時, 邏輯文件適用于所有為邏輯路徑維護的語法組。輸入到“物理文件”中的文件名將替換分配到邏輯路徑的物理路徑中的保留字<FILENAME> 。要保持此 名稱獨立于 操作系統(tǒng),請選擇以字母開始的名稱,該名稱最多由8 個字符組成且不包含特殊字符。
通過選擇“ 保存”,保 存定義。
?
?
在ABAP/4 程序中使用 邏輯文件
可以使用功 能模塊 FILE_GET_NAME 從 ABAP/4 程序中的邏 輯文件名創(chuàng) 建物理文件 名。要在程 序中插入調(diào) 用功能模塊 ,請在 ABAP/4 編輯器屏幕 中選擇“編 輯 -> 插入語句” 。在出現(xiàn)的 對話框窗口 中,標(biāo)志“調(diào)用功能”并鍵入FILE_GET_NAME。 該功能模塊 的參數(shù)列表如下。
輸入?yún)?shù)
| 參數(shù) | 功能 |
| CLIENT | 邏 輯文件和路 徑的維護表 格是客戶相 關(guān)的。所以 可輸入所需 客戶。當(dāng)前 客戶存儲在 系統(tǒng)字段 SY-MANDT 中。 |
| LOGICAL_FILENAME | 將 要轉(zhuǎn)換的大 寫字母輸入 邏輯文件名 。 |
| OPERATING_SYSTEM | 可 以輸入事務(wù) SF04 列表中包含 的任何操作 系統(tǒng)(參見將操作系統(tǒng) 分配到語法 組 (頁 12) )。根據(jù)與 操作系統(tǒng)連 接的語法組 創(chuàng)建物理文 件名。默認 參數(shù)是系統(tǒng) 字段 SY-OPSYS 的值。 |
| PARAMETER_1 PARAMETER_2 | 如 果指定這些 輸入?yún)?shù), 則物理路徑 名中的保留 字 <PARAM_1> 和 <PARAM_2> 將由輸入值 替換。 |
| USE_PRESENTATION | 用 此標(biāo)志可決 定是否輸入 顯示服務(wù)器 的操作系統(tǒng) 而不是由參 數(shù) OPERATING_SYSTEM 輸入的操作 系統(tǒng)。 |
| WITH_FILE_EXTENSION | 如 果設(shè)置此標(biāo) 志不等于 SPACE ,則為邏輯 文件名定義 的文件格式 將附加到物 理文件名。 |
?輸出參數(shù)
| 參數(shù) | 功能 |
| EMERGENCY_FLAG | 如 果此參數(shù)不 等于 SPACE ,則在邏輯 路徑中不定 義物理名稱 。緊急物理 名稱可從表 格 FILENAME 和參數(shù)文件 參數(shù)創(chuàng)建。 |
| ?FILE_FORMAT | 此 參數(shù)是為邏 輯文件名定 義的文件格 式。例如, 可以使用此 參數(shù)決定按 何種模式打 開文件。 |
| FILE_NAME | 此 參數(shù)是物理 文件名(要 使用文件, 可以通過 ABAP/4 語句使用此 物理文件名 )。 |
例外參 數(shù)
| 參數(shù) | 功能 |
| FILE_NOT_FOUND | 如 果沒有定義 邏輯文件, 則出現(xiàn)此例 外。 |
| OTHERS | 如 果發(fā)生其它 錯誤,則出 現(xiàn)此例外。 |
?
?
假定邏輯文 件 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 系統(tǒng)運行于 操作系統(tǒng) HP-UX 之下,該操 作系統(tǒng)是 UNIX 語法組的成 員之一。如 同為 UNIX 語法組定義 的那樣,邏 輯文件名 MYTEMP 和邏輯路徑 TMP_SUB 一起轉(zhuǎn)換為 物理文件名 /tmp/TEST01 。字段 FNAME 可用于以后 的程序流以 使用目錄 /tmp 中的文件 TEST01 。
?
假定具有物 理文件名 TEST 的邏輯文件 名 EMPTY 與沒有指定 物理路徑的 邏輯路徑連 接。如果在 上例中用‘ EMPTY’ 替換輸出參 數(shù)‘MYTEMP’ ,則輸出結(jié) 果如下:
HP-UX
FLAG????? : X
FORMAT??? :
Phys. Name: /usr/sap/S11/SYS/global/TEST
系統(tǒng)創(chuàng)建緊 急文件名, 其路徑取決 于當(dāng)前 SAP 系統(tǒng)的安裝 。
?
?
使用演示服 務(wù)器上的文 件
要使用演示 服務(wù)器上的文件,請使用功能庫中提供的特殊功能模塊。必須使用內(nèi)表格作為程序與功能模塊之間的接口。下列主題說明:
物理文件名 取決于演示 服務(wù)器的操作系統(tǒng)。如同使用平臺獨 立的文件名 (頁 12)所述,可以使用邏輯文件名編寫平臺相關(guān)的ABAP/4 程序。
?
通過用戶對 話向演示服 務(wù)器寫入數(shù) 據(jù)
要通過用戶 對話從內(nèi)表 格向演示服務(wù)器寫入數(shù)據(jù),請使用功能模塊DOWNLOAD。 最重要的參 數(shù)列表如下。有關(guān)詳細信息,參見事務(wù)SE37 中的功能模塊文檔。
重要輸入?yún)?數(shù)
| 參數(shù) | 功能 |
| BIN_FILESIZE | 二 進制文件長 度 |
| CODEPAGE | 僅 用于在 DOS 中下載:值 IBM |
| FILENAME | 文 件名(用戶 對話的默認 值) |
| FILETYPE | 文 件類型(用 戶對話的默 認值) |
| ITEM | 用 戶對話窗口 標(biāo)題 |
| MODE | 寫 入模式(‘ empty’ = 改寫,‘A’ = 追加) |
用 FILETYPE 可指定傳輸模式。可能值有:
?????? BIN
二進制文件 :必須指定 文件長度, 并且內(nèi)表格 必須包含有 數(shù)據(jù)類型 X 的一列。
?????? ASC
ASCII 文件.
?????? DAT
Excel 文件:列由 定位符分隔 ,行由回車 符和換行碼 分隔。
?????? WK1
Excel 文件和 Lotus 文件:數(shù)據(jù) 將寫入 WK1 電子表格。
重要輸出參 數(shù)
| 參數(shù) | 功能 |
| ACT_FILENAME | 文 件名(在用 戶對話期間 輸入) |
| ACT_FILETYPE | 文 件類型(在 用戶對話期 間輸入) |
| FILESIZE | 傳 輸字節(jié)數(shù) |
表 格參數(shù)
| 參數(shù) | 功能 |
| DATA_TAB | 內(nèi) 部源表格 |
例 外參數(shù)
| 參數(shù) | 功能 |
| INVALID_FILESIZE | 無 效參數(shù) BIN_FILESIZE |
| INVALID_TABLE_WIDTH | 無 效表格結(jié)構(gòu) |
| ?INVALID_TYPE | 參 數(shù) FILETYPE 無效值 |
?
?
假定表示所 用的操作系 統(tǒng)是 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.
啟動程序后 ,將出現(xiàn)如 下用戶對話 窗口:
?
在此窗口中 ,用戶可更 改默認值。 在單擊“確 定”后,系 統(tǒng)將從內(nèi)表 格 TAB (已在程序 中填入數(shù)據(jù) )向文件 d:\temp\saptest.xls 傳送數(shù)據(jù)。 如果該文件 已經(jīng)存在, 則系統(tǒng)詢問 用戶是否替 換此文件。 系統(tǒng)將在列 之間設(shè)置分 隔符,以及 在每行結(jié)尾 設(shè)置回車符 和換行。
此示例輸出 如下:
SY-SUBRC:????0
Name??? : d:\temp\saptest.xls
Type??? : DAT
Size??? :??? ?????27
在演示服務(wù) 器上可以從 Excel 打開 d:\temp\saptest.xls 文件。出現(xiàn) 如下 Excel 屏幕:
?
?
?
不通過用戶 對話向演示 服務(wù)器寫入 數(shù)據(jù)
在不使用用 戶對話的情況下,要向演示服務(wù)器寫入數(shù)據(jù),請使用功能模塊WS_DOWNLOAD 。最重要的 參數(shù)列表如 下。有關(guān)詳細信息,參見事務(wù)SE37 中的功能模塊文檔。
重要輸入?yún)?數(shù)
| 參數(shù) | 功能 |
| BIN_FILESIZE | 二 進制文件長 度 |
| CODEPAGE | 僅 在 DOS 中下載:值 IBM |
| FILENAME | 文 件名 |
| FILETYPE | 文 件類型 |
| MODE | 寫 模式(‘empty’ = 改寫,‘A’ = 追加) |
使用 FILETYPE 可以指定傳 輸模式。可 能值有:
?????? BIN
二進制文件 :必須指定 文件長度, 并且內(nèi)表格 必須包含有 數(shù)據(jù)類型 X 的一列。
?????? ASC
ASCII 文件,系統(tǒng) 在每行之后 設(shè)置行結(jié)束 標(biāo)志。
?????? DAT
Excel 文件:系統(tǒng) 用定位符分 隔列,用回 車符和換行 碼分隔行。
?????? WK1
Excel 文件和 Lotus 文件:數(shù)據(jù) 將寫入 WK1 電子表格。
輸出參數(shù)
| 參數(shù) | 功能 |
| FILELENGTH | 傳 輸字節(jié)數(shù) |
表 格參數(shù)
| 參數(shù) | 功能 |
| DATA_TAB | 內(nèi) 部源表格 |
例 外參數(shù)
| 參數(shù) | 功能 |
| FILE_OPEN_ERROR | 系 統(tǒng)不能打開 文件 |
| FILE_WRITE_ERROR | 系 統(tǒng)不能向文 件寫入數(shù)據(jù) |
| ?INVALID_FILESIZE | 無 效的參數(shù) BIN_FILESIZE |
| INVALID_TABLE_WIDTH | 無 效的表格結(jié) 構(gòu) |
| INVALID_TYPE | 無 效的參數(shù) FILETYPE 值 |
?
?
假定用于表 示的操作系 統(tǒng)是 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
系統(tǒng)將向 ASCII 文件 d:\temp\saptest.txt. 傳輸表格 TAB 的五行。使 用 WINDOWS“ 文件管理器 ”,如下所 示可以檢查 文件的存在 及長度:
?
現(xiàn)在可以使 用演示服務(wù) 器上的任何 編輯器打開 文件。在下 示例中,使 用 DOS 編輯器:
?
?
?
通過用戶對 話從演示服 務(wù)器中讀取 數(shù)據(jù)
要通過用戶 對話將數(shù)據(jù) 從演示服務(wù)器讀取到給內(nèi)表格中,請使用功能模塊UPLOAD 。最重要的 參數(shù)列表如 下。有關(guān)詳細信息,參見事務(wù)SE37 中的功能模塊文檔。
重要輸入?yún)?數(shù)
| 參數(shù) | 功能 |
| CODEPAGE | 僅 在 DOS 中加載:值 IBM |
| FILENAME | 文 件名(用戶 對話默認值 ) |
| FILETYPE | 文 件類型(用 戶對話默認 值) |
| ITEM | 用 戶對話窗口 標(biāo)題 |
使用 FILETYPE 可以指定傳輸模式。可能值有:
?????? BIN
二進制文件 。
?????? ASC
ASCII 文件:具有 行結(jié)束標(biāo)志 的文本文件 。
?????? DAT
作為文本文 件保存的 Excel 文件,列由 定位符分隔 ,行由回車 符和換行碼 分隔。
?????? WK1
作為 WK1 電子表格保 存的 Excel 文件和 Lotus 文件。
重要輸出參 數(shù)
| 參數(shù) | 功能 |
| FILESIZE | 傳 輸字節(jié)數(shù) |
| ACT_FILENAME | 文 件名(在用 戶對話期間 輸入) |
| ACT_FILETYPE | 文 件類型(在 用戶對話期 間輸入) |
表 格參數(shù)
| 參數(shù) | 功能 |
| DATA_TAB | 內(nèi) 部目標(biāo)表格 |
?例外參數(shù)
| 參數(shù) | 功能 |
| CONVERSION_ERROR | 在 數(shù)據(jù)轉(zhuǎn)換中 的錯誤 |
| INVALID_TABLE_WIDTH | 無 效的表格結(jié) 構(gòu) |
| INVALID_TYPE | 不 正確參數(shù) FILETYPE |
?
?
?
假定用于表 示的操作系 統(tǒng)是 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.
在啟動此程 序后,將出 現(xiàn)用戶對話 窗口:
?
在此窗口中 ,用戶可以 更改默認值 。單擊“確 定”后,系 統(tǒng)將數(shù)據(jù)從 文件 d:\temp\mytable.tab 傳輸?shù)絻?nèi)表 格 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
內(nèi)表格 TAB 的內(nèi)容等于 初始 Excel 表格的內(nèi)容 。
?
不通過用戶 對話從演示 服務(wù)器中讀 取數(shù)據(jù)
不通過用戶 對話,要將 數(shù)據(jù)從演示服務(wù)器讀取到內(nèi)表格,請使用功能模塊WS_UPLOAD 。最重要的 參數(shù)列表如 下。有關(guān)詳細信息,參見事務(wù)SE37 中的功能模塊文檔。
重要輸出參 數(shù)
| 參數(shù) | 功能 |
| CODEPAGE | 僅 在 DOS 中下載:值 IBM |
| FILENAME | 文 件名 |
| FILETYPE | 文 件類型 |
使用 FILETYPE 可以指定傳 輸模式。可 能值有:
?????? BIN
二進制文件 。
?????? ASC
ASCII 文件:具有 行結(jié)束標(biāo)志 的文本文件 。
?????? DAT
作為文本文 件保存的 Excel 文件,列由 定位符分隔 ,行由回車 符和換行碼 分隔。
?????? WK1
作為 WK1 電子表格保 存的 Excel 文件和 Lotus 文件。
輸出參數(shù)
| 參數(shù) | 功能 |
| FILELENGTH | 傳 輸字節(jié)數(shù) |
表 格參數(shù)
| 參數(shù) | 功能 |
| DATA_TAB | 內(nèi) 部目標(biāo)表格 |
?例外參數(shù)
| 參數(shù) | 功能 |
| CONVERSION_ERROR | 在 數(shù)據(jù)轉(zhuǎn)換中 的錯誤 |
| FILE_OPEN_ERROR | 系 統(tǒng)不能打開 文件 |
| FILE_READ_ERROR | 系 統(tǒng)不能從文 件中讀取數(shù) 據(jù) |
| INVALID_TABLE_WIDTH | 無 效的表格結(jié) 構(gòu) |
| INVALID_TYPE | 無 效的參數(shù) FILETYPE 值 |
?
?
假定用于表 示的操作系 統(tǒng)是 WINDOWS NT 并假定如下 文本文件:
?
下列程序?qū)?讀取該文本 文件:
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.
此示例輸出 如下:
?
?
?
?
檢查演示服 務(wù)器上的文 件
要獲取演示 服務(wù)器上的 文件和演示服務(wù)器操作系統(tǒng)的信息,請使用功能模塊WS_QUERY 。最重要的 參數(shù)列表如 下。有關(guān)詳細信息,參見事務(wù)SE37 中的功能模塊文檔。
重要輸入?yún)?數(shù)
| 參數(shù) | 功能 |
| FILENAME | 查 詢命令‘FE’ 、‘FL’ 、和‘DE’ 的文件名 |
| QUERY | 查 詢命令 |
輸入 參數(shù)QUERY 定義查詢命令。一些重要查詢命令列表如下:
?????? CD:查 詢當(dāng)前目錄
?????? EN:查 詢環(huán)境變量
?????? FL:查 詢用 FILENAME 指定文件的 長度
?????? FE:查 詢用 FILENAME 指定文件的 存在性
?????? DE:查 詢用 FILENAME 指定目錄的 存在性
?????? WS:查 詢演示服務(wù) 器的窗口系 統(tǒng)
?????? OS:查 詢演示服務(wù) 器的操作系 統(tǒng)
輸出參數(shù)
| 參數(shù) | 功能 |
| RETURN | 查 詢結(jié)果(‘ 0’表示‘ no’,‘ 1’表示‘ yes’) |
?例外參數(shù)
| 參數(shù) | 功能 |
| INV_QUERY | QUERY 或 FILENAME 的錯誤值 |
?
?
假定用于表 示的操作系 統(tǒng)是 WINDOWS NT,并假 定文件 SYSTEM.INI 存在(如下 所示):
?
下述程序決 定操作系統(tǒng) 及此文件的 屬性:
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 窗口系統(tǒng)是 WINDOWS NT 的窗口系統(tǒng) 。關(guān)于縮寫 的詳細信息 ,請將光標(biāo) 放在功能模 塊文檔屏幕 的 QUERY 字段上并選 擇“幫助” 。
轉(zhuǎn)載于:https://www.cnblogs.com/wangxiaowen/p/8992901.html
總結(jié)
- 上一篇: Python实用笔记 (2)list和t
- 下一篇: postgres安装02--postgi