首位填上F,然後按F4,會出現如下內容:
File File End of File
Filename Type Designation File Addition Sequence
File Record Limits Length of Record
Format Length Processing Key Field Address Type
File
Organization Device Keywords
Comment
各項的含義分別是:
Filename:
需要聲明的檔案名,必須頂格,檔案名必須唯一,也就是程式中對同樣的檔案名不能聲明兩次。
File Type:
聲明檔的處理類型。必須填寫。允許的選項有:
I: 輸入型,即唯讀檔案,對聲明的檔只取其記錄的值,不對記錄進行修改
U: 修改型,即對聲明的檔進行修改操作(刪除記錄屬於修改操作的一種)
O: 輸出型,即只寫,對聲明的檔只進行寫操作。
C:混合型,用於對螢幕檔的定義。(混合型,即輸入/輸出型,以螢幕檔為便,也就是讀取螢幕檔的一些輸入欄位資訊,同時也可以輸出一些欄位的值到螢幕檔中,但不能對螢幕檔自身進行修改,所以與上面的U是有區別的)
File Designation:
檔的指定方式,允許的選項有:
不填:表示這是一個輸出檔,即“File Type”項為“O”時,此項不填
P:表明聲明的檔是主文件,這個很少用,cycle相關
S:表明聲明的檔是次檔,這個沒用過,cycle相關
R:Record address file,記錄位址檔?沒用過
T:陣列或表檔?不懂,沒用過
F:常用,具體含義不知道該如何翻譯(Full procedural file)
簡單來說,不考慮cycle(迴圈控制),這樣理解就夠了:
當“File Type”為I,U,C時,這裡填“F”
當“File Type ”為O時,這裡不填寫
End of File:
程式結束前,對記錄的處理方式。可以不填,或填“E”。但從英文解釋上來看,不敢妄下定論,似乎不填,表示在程式結束前,要處理所有檔的所有記錄(含LF?);填E,表示只處理這個檔的所有記錄?
總之,此項一般是不填。
File Addtion:
是否會增加檔中的記錄,即是否會對檔進行寫操作。
可以不填,或填“A”
當File Type為“O”時,系統自動預設此項為“A”,不必填寫;
當File Type為“I”,或“U”時,這項內容可以填“A”,也可以不填。不填,即表示不會增加檔中的記錄,也就是沒有寫操作;填“A”時,即表示會增加檔中的記錄,也就是會對檔進行寫操作。
Sequence:
針對cycle使用的,表示排序順序。(Cycle我沒有用過,估計可能是使用控制起來,程式碼不那麼直觀,不利於上手和維護,所以現在已經不流行使用了。)
當定義為非cycle檔時,即“File Designation”項非“P”、“S”時,此項必須為空;
當定義為cycle檔時,即“File Designation”項為“P”、或“S”時,此項可填空、A、D。A表示昇冪,D表示降冪。
因為CYCLE現在已不常用,所以通常不填。
File Format
檔案格式,不能為空,允許的值有:
E: 聲明的檔,是外部描述的檔(即檔在程式運行之前就已存在?)
F: 聲明的檔,是一個程式描述檔?(不知道什麼意思,沒用過)
這裡通常填“E”,即為外部描述檔
Record Length
“File Format”為“F”時,才需要填寫。沒用過
通常不填
Limit Processing
不懂。
通常不填。
Length of Key Field
查詢時,索引鍵值的長度
如果“File Format”項等於“E”,即外部描述檔時,此項不填
如果“File Format”項等於“F”,便不需要按KEY值查詢時,此項也不填
如果“File Format”項等於“F”,需要按KEY值查詢時,此項填寫KEY值的長度(1—2000)。
因為一般都使用外部描述檔,所以這裡一般都不填寫。
Record Address Type
記錄定址類型,好象是對檔鍵值的描述。允許的值如下:
空:不使用KEY值,在程式段中,不會對檔的查詢定位操作,如“SETLL”、“CHAIN”操作碼都不會用的時,該項填空。
K: 使用KEY值,即表示會對聲明的檔進行查詢定位操作,此時聲明的檔必須有鍵值,即必須為邏輯檔(LF檔),或在生成文件時,已加入了KEY值。
(下面的選項應該是程式描述檔才會使用)
A: KEY值為字元型
D:KEY值為日期型
F:KEY值為數字型
G:KEY值為非英文字元
P:KEY值為壓縮型數位
T:KEY值為時間型
Z:KEY值為timestamp?
總之,如果要按照鍵值對聲明的檔進行查詢定位操作(即程式中使用了CHAIN、SETLL操作碼,則此項需要填寫“K”;如不需要進行查詢操作,則不填。),此項填“K”時,聲明的檔必須含有KEY值。
File Organization
不知道,一般不填
Device
聲明檔的存放位置,必須填寫,允許的值有:
DISK: 磁片檔,即檔存儲在磁片上,最常見的;
PRINTER: 列印檔案,提供列印輸出描述,以及對列印設備訪問。列印報表用這個;
WORKSTN: workstation,工作站,顯示檔。螢幕檔(DSPF)的定義用這個值
(下麵這兩種我沒用過的)
SEQ: 磁帶檔,檔存儲在磁帶上。
SPECIAL: 特殊檔,我現在也不是很清楚具體使用方式。據blogliou說,這種類型,是允許指定一種不能被RPG直接操作的輸入/輸出設備。比如可以通過SPECIAL檔,在RPGLE程式中實現象讀寫磁片一樣,對DTAQ進行程式間資料交換。
Keyword
可以不填,常用的值有(這裡只列出幾個常用的):
COMMIT
該檔記錄的資料操作進行日誌處理(關於日誌處理,後面會章節會講到)
RENAME
對檔記錄格式名進行重命名。比如說程式中需要同時聲明PFFHSL1,PFFHSL2這兩個邏輯檔。這兩個邏輯檔的記錄格式名都是一樣(通常和PF一樣,即都為FMTFHS;不過也可以定義成不同。如果不同,當然就不需要使用RENAME鍵字了)。 那麼,為了能讓系統區分,就必須對其中一個的記錄格式名進行重命名。RENAME的語法:RENAME(舊記錄格式名:新記錄格名),如下:
FPFFHSL1 IF E DISK
FPFFHSL2 IF E DISK RENAME(FMTFHS:FMTFHS2
新記錄格式可以自由定義,只要在該程式中無同名的即可。RENAME並不會真正的更改檔的記錄格式名,僅是在當前運行程式中進行重命名。對同時運行的其它程式無影響
USROPN
對於聲明的檔,由用戶自行打開。如果不填寫此關鍵字,系統將會在程式最最開始(執行第一句C行語句前),自動執行“OPEN 檔” 的操作,在程式結束後,自動執行“CLOSE 檔”的操作。而填寫此關鍵字之後,OPEN,CLOSE的操作將由使用者在C行程式段中,自行處理。如果用戶未執行OPEN操作,就執行CHAIN、READ、SETLL等語句,在編譯器時就會報錯。程式在結束之前,必須關閉所有已打開的檔,所以用起來會比較繁瑣。USROPN常作用於對檔的解鎖,在同一程式中打開同一檔的不同MEMBER等,屬於一個較高級的用法,可在實際操作中慢慢體會。
OPEN,CLOSE的操作碼,對應的是檔案名,不是記錄格式名。即
C OPEN PFFHSL1
C CLOSE PFFHSL1
而不是
C OPEN FMTFHS
Comment
注釋說明。源自RPG,在RPG中是有作用的,可以對程式作簡短的說明,但在RPGLE中,其實已經沒有作用了,此項不用填。(填了也沒用)
常用例子
對檔進行唯讀的聲明:
FPFFHS IF E DISK
對檔進行修改的聲明:
FPFFHS UF E DISK
對檔進行只寫的聲明:
FPFFHS O E DISK
對檔進行修改,以及增加記錄的操作:
FPFFHS UF A E DISK
對檔進行查詢,增加記錄的操作,並對檔進行查詢操作:
FPFFHSL1 IF A E K DISK
聲明兩個記錄格式相同的檔,並對其中之一進行重命名
FPFFHSL1 IF E K DISK
FPFFHSL2 IF E K DISK RENAME(FMTFHS:FMTFHS2)
注:在聲明時,兩個檔不一定要上下緊接著;隨便改哪一個檔對應的記錄格式都可以;新舊記錄格式名用冒號隔開,新記錄格式名可自行定義,無規則。
對檔的修改操作進行日誌處理:
FPFFHSL2 UF E K DISK COMMIT
補充說明
聲明的檔,可以同時使用多個keyword關鍵字,並可以不在同一行(但必須緊接在聲明的檔的下面),如下:
FPFFHSL2 IF E DISK RENAME(FMTFHS:FMTFHS2)
F COMMIT
即表示檔PFFHSL2,同時使用了RENAME、COMMIT兩個關鍵字。
如果寫得下,也可以寫在同一行,以空白鍵分開,如下
FPFFHSL2 IF E DISK COMMIT RENAME(FMTFHS:FMTFHS2)
- May 25 Fri 2007 16:38
F行定義說明
全站熱搜
留言列表