Das Lesen und Schreiben von Daten in Dateien (z. B. in sequenziellen oder CSV-Dateien) ist mit dem Lesen und Schreiben von Datensätzen in jeder anderen Datenquelle vergleichbar. Der Prozess, mit dem die Verbindung zur Datenquelle hergestellt wird, ist hier jedoch anders und auf bestimmte Varianten der EGL-Datenzugriffsanweisungen beschränkt.
EGL lässt das Schreiben und Lesen von Daten in zahlreichen Dateitypen zu, zu denen auch indexierte Dateien, sequenzielle Dateien und CSV-Dateien (auch Datei mit Trennzeichen genannt) gehören. Diese Dateitypen unterscheiden sich hauptsächlich durch das Verfahren, mit dem Informationen in der Datei gespeichert werden. Der Prozess für das Lesen der Datei und das Schreiben von Daten in die Datei ist bei den einzelnen Typen ähnlich. Im vorliegenden Abschnitt werden sequenzielle Dateien und CSV-Dateien behandelt.
Um eine Verbindung zu einer Datei herzustellen, müssen Sie zunächst einen Ressourcenzuordnungsabschnitt definieren, der auf diese Datei verweist. Die Datei selbst kann ein Datensatz oder auch eine Datei in Ihrem System sein. Im vorliegenden Beispiel wird eine lokale Datei verwendet.
C:\myFolder\myFile.dat
Falls Sie auf eine nicht vorhandene Datei verweisen, erstellt EGL die Datei, wenn Sie Daten in die Datei schreiben wollen.Der Ressourcenzuordnungsabschnitt sieht wie folgt aus (wobei die Felder Ihre eigenen Werte enthalten):

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
Nun können Sie den Datensatzabschnitt in Ihrem Code verwenden, um auf die sequenzielle Datei zuzugreifen.
Weitere Informationen zu Ressourcenzuordnungen enthält das EGL-Generierungshandbuch.
Das Schreiben von Daten in eine Datei ähnelt dem Schreiben von Daten in eine beliebige andere Datenquelle.
import myProject.myData.mySerialRecord;
variableRecord mySerialRecord;
variableRecord.myInteger = 45;
variableRecord.myChar = "Hello!";
add variableRecord;
Das Lesen von Daten aus einer sequenziellen oder CSV-Datei ähnelt dem Lesen aus jeder beliebigen anderen Dateiquelle. Die Datensätze müssen jedoch nacheinander gelesen werden.
Im Allgemeinen wird die Anweisung get next verwendet, um einen einzelnen Datensatz zu lesen, und die Anweisung get, um mehrere Datensätze zu lesen (bei seriellen Datensätzen). In diesem Kontext beginnt die Anweisung get next beim ersten Datensatz in der sequenziellen Datei und liest die Datensätze nacheinander.
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
Dieses Beispiel zeigt drei Datenzeilen, die jeweils vier Einzelinformationen enthalten. Jede Einzelinformation ist durch ein Zeichen, das
Trennzeichen genannt wird, abgegrenzt. Im obigen Beispiel handelt es sich bei diesem Zeichen um ein Komma. Bitte beachten Sie, dass die dritte Einzelinformation in der dritten Zeile null ist; dies wird dadurch angegeben, dass sich zwischen den Trennzeichen keine Daten befinden. CSVRecord-Abschnitte behandeln jede dieser Einzelinformationen als Feld. Ein CSVRecord-Abschnitt für diese Datei würde folgendermaßen aussehen:record CsvRec type CSVRecord
{
fileName = "CSVFile",
delimiter = ",",
textQualifier = "\"",
style = CsvStyle.quoted
}
jobCode int;
permStatus char(3);
hireDate date?;
firstName string;
end
Das Feld fileName erfüllt denselben Zweck wie
'serialRecord'. Es verweist auf ein Element in einem Ressourcenzuordnungsabschnitt, der auf eine Datei zeigt. Der CSVRecord-Abschnitt besitzt jedoch zusätzliche Eigenschaften. Die Eigenschaft delimiter gibt das Zeichen an, mit denen die Einzelinformationen voneinander getrennt werden (in diesem Fall ein Komma). Die Eigenschaften textQualifier und style gehören eng zusammen - diese Konfiguration gibt an, dass Zeichenfolgen in der Datei in Anführungszeichen gesetzt werden können, falls sie reservierte Zeichen enthalten.
Weitere Informationen finden Sie unter CSVRecord-Stereotyp.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
Dieses Programm liest Daten aus der Datei auf dieselbe Weise wie bei den vorherigen Beispiele mit Verwendung des sequenziellen Datensatzes, also mithilfe der Anweisung get
next. Mit der Anweisung add können Sie auf dieselbe Weise Daten in die Datei schreiben.