首位填上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)

狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()