順次ファイルやコンマ区切り値 (CSV) ファイルなどのファイルに対する読み取りおよび書き込みは、その他のタイプのデータ・ソースにあるレコードの書き込みや読み取りと同様です。 ただし、データ・ソースへの接続プロセスが異なり、EGL データ・アクセス・ステートメントの特定のバリエーションに制限されます。
EGL では、いくつかのタイプのファイルについて書き込みおよび読み取りを行うことができます。これには、索引付きファイル、順次ファイル、およびコンマ区切り値 (CSV) ファイル (区切り文字ファイルと 呼ばれることもある) などが含まれます。これらのタイプのファイルは、主に、情報をファイルに 保存する点において異なりますが、ファイルの読み取りおよびファイルへの書き込みのプロセスは、 いずれのタイプも似ています。 このトピックでは、順次ファイルと CSV ファイルについて扱います。
ファイルに接続するには、そのファイルを指すリソース関連パーツを最初に定義しておく必要があります。 このファイルそのものは、ご使用のシステム上のファイルでも、データ・セットでも構いません。このサンプルでは、ローカル・ファイルを使用します。
C:¥myFolder¥myFile.dat
存在していないファイルを指示すると、そのファイルへの書き込み時に EGL がファイルを作成します。
リソース関連パーツで、各フィールドにユーザー独自の値を指定した場合は、次のようになります。

record mySerialRecord type serialRecord
10 myInteger int;
10 myChar char(50);
end
record mySerialRecord type serialRecord
{fileName = "myFile"}
10 myInteger int;
10 myChar char(50);
end
これで、このレコード・パーツをコード内で使用して、順次ファイルにアクセスできるようになりました。
リソース関連パーツについて詳しくは、「EGL 生成ガイド」を参照してください。
ファイルへの書き込みは、その他のデータ・ソースへの書き込みと同様に行います。
import myProject.myData.mySerialRecord;
variableRecord mySerialRecord;
variableRecord.myInteger = 45;
variableRecord.myChar = "Hello!";
add variableRecord;
順次ファイルまたは CSV ファイルからのデータの読み取りは、その他のデータ・ソースからの読み取りと同様です。ただし、順序どおりにレコードを読み取る必要があります。
通常、シリアル・レコードを扱う際に、単一レコードを読み取る場合は get next ステートメントを、複数レコードを読み取る場合は get ステートメントを使用します。 このコンテキストでは、get next は、順次ファイルの先頭レコードから読み取りを開始し、順序に沿ってレコードを読み取ります。
import myProject.myData.mySerialRecord;
variableRecord mySerialRecord;
get next variableRecord;
sysLib.writeStderr(variableRecord.myChar);
Hello!
123,yes,3/9/2007,Rahima
-1,no ,9/9/1999,Jorge
92,yes,,Ludmilla
この例は、データが 3 行で、それぞれの行に 4 つの情報部分があることを示しています。
情報の各部分は、区切り文字と呼ばれる文字で区切られています。この例ではコンマを使用しています。3 行目の 3 番目のデータ部分は、
区切り文字の間にデータがないことが示すように、ヌルである点に注意してください。
CSVRecord パーツは、これらの情報部分をそれぞれフィールドとして扱います。
このファイルの CSVRecord は、以下の例のようになります。record CsvRec type CSVRecord
{
fileName = "CSVFile",
delimiter = ",",
textQualifier = "¥"",
style = CsvStyle.quoted
}
jobCode int;
permStatus char(3);
hireDate date?;
firstName string;
end
fileName フィールドは、serialRecord と同じ目的を実行し、ファイルを指すリソース関連パーツの要素を参照します。 ただし
、CSVRecord にはいくつかの追加プロパティーがあります。
delimiter プロパティーは、情報の各部分を区切る文字を示します。この例ではコンマです。
textQualifier プロパティーと style プロパティーには密接な関係があります。この構成は、ストリングが予約文字を含んでいる場合は、
ファイルのストリングを引用符で囲むことができることを示しています。
詳しくは、CSVRecord ステレオタイプを参照してください。program readCSV type BasicProgram {}
oneRecord CsvRec;
function main()
//get the first record
get next oneRecord;
if (oneRecord is endOfFile)
//if there are no records
SysLib.writeStdout("This file is empty.");
else
while (oneRecord not endOfFile)
//perform this action for each record found
SysLib.writeStdout(oneRecord.firstName);
get next oneRecord;
end
end
end
end
このプログラムは、順次レコードを使用した前の例と同じ方法で、get next ステートメントを使用してファイルを読み取ります。
同じように、add ステートメントを使用して、CSV ファイルに書き込むことができます。