FILENEXTファンクションは、レコードをFILEVIEWコマンドによって処理できるようにします。レコードを読み取れた場合にYES
を返し、ファイルの末尾に達した場合にNO
を返します。
使用上の注意
ファイルの開閉
FILENEXTでファイルからレコードを取得するには、まずFILEOPENファンクションを使用してファイルを読取り用(READモード)として開きます。終了したらFILECLOSE文でファイルを閉じます。
データの処理
FILENEXTでレコードを読み取った後、FILEVIEW文を使用してレコードを処理します。FILEVIEWは、入力データを処理し、それを各フィールドの説明に従ってアナリティック・ワークスペース・オブジェクトまたはローカル変数に割り当てます。FILEVIEWは、同じレコードを連続処理するために複数回コールできます。別のレコードを処理するには、FILENEXTを再びコールします。
自動ループ
すべてのレコードが基本的に同じ方法で処理される場合、FILEREADコマンドを使用すると、ファイルのレコードが自動的にループされるので便利です。
レコードの書込み
選択したレコードの出力ファイルへの書込みについては、FILEPUTコマンドを参照してください。
レコード数
RECNOファンクションを使用すると、読取り専用アクセスで開かれているファイルの現行レコード数を取得できます。
バイナリ・ファイルおよびテキスト・ファイルの読取り
ファイルを開くときにBINARYを指定しなかった場合、FILENEXTは次の改行文字を含めてそこまでデータを読み取ります。ファイルを開くときにBINARYを指定した場合、FILENEXTファンクションを使用する前に、FILESETを使用してLSIZEを適切なレコード長に設定する必要があります。その後、FILENEXTはデータを一度に1レコードずつ読み取ります。
例
例7-90 FILENEXTを使用するプログラム
レコードが次のようにレイアウトされているファイルの月間販売データを受け取るとします。
Column Width Format Data
1 1 Text Division code
2 10 Text District name
12 10 Text Product name
30 4 Packed binary Sales in dollars
34 4 Packed binary Sales in units
コードがAである部門に関してのみレコードを処理します。次のプログラムの抜粋は、ファイルを開き、ファイルの各行を読み取って部門Aのデータであるかどうかを判別し、部門Aのデータである場合に販売データを読み取った後、ファイルを閉じます。ファイル名は、プログラム名の後のステートメント行で引数として指定します。
VARIABLE fil.unit INTEGER . . . fil.unit = FILEOPEN(arg(1) READ) LIMIT month TO &arg(2) WHILE FILENEXT(fil.unit) DO FILEVIEW fil.unit WIDTH 1 rectype IF rectype EQ 'A' THEN FILEVIEW fil.unit COLUMN 2 WIDTH 10 district - WIDTH 10 product - COLUMN 30 WIDTH 4 BINARY sales - WIDTH 4 BINARY UNITS DOEND FILECLOSE fil.unit