TXSeries入門系列文章6

<FD entry name> :          將在文件APIs命令中使用

<fileName> :                   在服務器中被”cicssdt“創建的文件名稱

<fieldName> :                 指定FD使用哪個域作為索引

<serverName>:               管理指定文件的服務器名稱。

此處使用第一節中創建的file1作為例子,命令如下:

#cicsadd -c fd -r RGN1 myFile RSLKey=public BaseName=file1 IndexName=id

FileServer=”/.:/cics/sfs/OceanLinux64″

需要冷啟動region或者”-B“選項來更新運行時數據庫。

 
 

參閱:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_file_defns.html?lang=en

b.定義用於裝載數據的結構體

記錄類似於表中的行一樣存儲在文件中。我們最好為文件準備一個相同結構的結構體。例如,file1包含有id、名稱和年齡三個不同的域,所以結構體也應該以相同的大小包含這三種域/變量。

例如:      

struct FileRecord {

char id[3];

char name[10]

char age[3]

} record;

還記得我們之前創建的域的類型嗎?是byteArray。為了確保域的大小是相同的並且可以靈活編程,我們使用字符集合來存儲數據。如果域的數量、大小或類型不同,相應地改變結構體進行匹配。

我們推薦在將數據存入前,把所有域的值通過”memset“函數設定為‘\0’。例如:memset(record.name,’\0′,10)

現在可以在結構體實例中存儲記錄了。

2)讀取記錄

通過使用READ命令,用戶可以將文件中的指定記錄向一個地址中存儲(實際上它逐位元組地複製了所有域的數據到這個地址,包括所有的‘\0’,所有我們需要一個域大小相同的結構體來將記錄分割到幾個域,域的值可以通過使用點號(.)來直接讀取)。

用戶可以通過兩種方式讀取記錄,一種是直接讀取,另一種是順序瀏覽。

a.直接讀取

直接讀取允許用戶讀取一個被RIDFLD指定的記錄,例如通過索引(int value=array[2])獲取一個數組中的值。

語法

READ FILE(“<FD entry >”) INTO(<targetAddress>) RIDFLD(<recordIndex>)

選項

<FD entry> :                    想要讀取的文件的FD名稱

<targetAddress> :           指定存儲記錄數據的地址。大多數情況下,使用之前為文件準備的結構體的地址。

<recordIndexx> :                         它應該是一個指定你想要讀取的記錄的索引值的變量。注意這個變量的類型和大小應該和你在FD中指定的索引相同。

感覺有些複雜么?我們來看一個關於之前步驟的例子:

#cicsadd -c fd -r RGN1 myFile RSLKey=public BaseName=file1 IndexName=id

FileServer=”/.:/cics/sfs/OceanLinux64″ //添加一個FDid被索引域所指定

 
 

源代碼

struct FileRecord {

char id[3];

char name[10]

char age[3]

} record; //聲明一個結構體來存儲記錄

memset(record.id,’\0′,3); //將所有位元組設置為 ‘\0’

memset(record.name,’\0′,10);

memset(record.age,’\0′,3);

char index[3]=”3″; //指定id=3的記錄將被讀取,注意大小和類型

EXEC CICS READ FILE(“myFile”) INTO(&record) RIDFLD(index);

fprintf(stderr,”Read result:\n”); //數據將會寫入console.nnnnnn文件中,只適用於測試,實際編程中不推薦

fprintf(stderr,”ID:%s\n”,record.id);

fprintf(stderr,”NAME:%s\n”,record.name);

fprintf(stderr,”AGE:%s\n”,record.age);

EXEC CICS SEND FROM(&record) LENGTH(16) ERASE; //將內容發送到終端

當使用”cicstcl“生成測試程序時,強烈推薦添加”-e -d“選項,這樣稍後用戶可以在cicslterm中使用CEDF來調試程序(見二單元)。

 
 

參閱:

關於READ命令:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_read.html?lang=en

關於直接讀取:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/tasks/t_dirct_rdng.html?lang=en

b.順序讀取

除了通過指定索引讀取記錄,TXSeries還允許我們只需指定一次RIDFLD就能重複地瀏覽記錄。

在開始讀取記錄之前,首先應該通過STARTBY設置一個開始點。

語法

STARTBR FILE(“<FD entry>”) RIDFLD(<recordIndex>)

之後就可以使用READNEXT來一個接一個地從指定的/當前的索引讀取記錄。

語法

READNEXT FILE(“<FD entry>”) INTO(<targetAddress>) RIDFLD(<recordIndex>)

READNEXT可以從目標地址讀取下一條記錄,recordIndex的值將會更新為當前記錄的索引。如果讀操作到達文件結尾,這條命令將會返回”ENDFILE“。

也可以使用READPREV從指定的/當前的索引向後讀取記錄。

語法

READPREV FILE(“<FD entry>”) INTO(<targetAddress>)

RIDFLD(<recordIndex>)

READNEXT相似,READPREV也可以將targetAddress更新為新記錄的數據,並使用當前的索引更新recordIndex的值。如果讀操作到達文件開頭,這條命令會返回”ENDFILE“。

如果READNEXT首先執行,然後READPREV再執行,一條記錄會被讀取兩次,反之亦然。

有時用戶可能想要通過RESETBR重設開始點。

語法

RESETBR FILE(“<FD entry>”) RIDFLD(<recordIndex>)

之後開始點就會被重設為recordIndex的值。

在所有瀏覽操作完成後,用戶應該通過ENDBR來結束文件的瀏覽從而避免意外錯誤。

語法

ENDBR FILE(“<FD entry>”)

這是關於文件瀏覽用戶所需要知道的所有命令。下面將展示一個順序瀏覽的例子。

示例數據:


瀏覽操作:


 
 

參閱:

關於順序讀取:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/tasks/t_sqntial_rdng_brwsng.html?lang=en

關於STARTBR

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_set_startbr.html?lang=en

關於READNEXT

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_readnext.html?lang=en

關於READPREV

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營