READ [ 'file[:ads]' | 'zip( [path/] elem)' | str-var | ?] [,] [rngcol] ] [BINARY [rngbyte] | RECORD | STRIP] [TABULATOR] [KEY] [OPEN] [code]
READ STDIN
Dateiname
Es wird eine Datei in den aktuellen Arbeitsbereich eingelesen.
Befinden sich in dem Arbeitsbereich bereits Daten, so wird die Datei an das Ende der bisherigen Daten angefügt.
Beim Einlesen von Dateien werden die Zeichen CR/LF (X'0D0A') gesucht und als Endekriterium für einen Satz gewertet. Dateien, die die Zeichen CR/LF nicht oder in einem Abstand der maximalen Satzlänge aufweisen, werden als Binärdaten ohne Satzstruktur angesehen und im EDT in einem besonderen Format dargestellt. Dazu wird der bisher eingelesene Teil des Arbeitsbereichs gelöscht und die Datei neu gelesen. Die Datei wird im Arbeitsbereich in Teilen zu jeweils 64 Byte dargestellt. Die Tatsache, dass hier keine echten Zeilenende-Kennzeichen vorhanden sind, ist an dem Zeichen "*" in den EDT-Zeilennummern zu erkennen. Bei satzstrukturierten Dateien wird hier ein Punkt "." angezeigt.
file Dateiname. Der Name muss in Hochkommas eingeschlossen werden. Enthält der Dateinamen keinen Pfadnamen, wird als Pfad das Arbeitsverzeichnis benutzt (siehe auch Kommando CHDIR).
ads Alternate Data Streams (ADS): Der ADS zu der angegebenen Datei file wird eingelesen. Diese Erweiterung wird nur von Windows NT/2000 mit NTFS-Dateisystem unterstützt. Die ADS sind für den Explorer "unsichtbar". Eine Liste der ADS können Sie mit dem Kommando FSTAT erzeugen.
zip([path/]elem) Element eines ZIP-Archivs. Der Name muss in Hochkommas eingeschlossen werden. Enthält der Dateinamen des ZIP-Archivs keinen Pfadnamen, wird als Pfad das Arbeitsverzeichnis benutzt (siehe auch Kommando CHDIR). Vor dem Elementnamen kann wahlweise ein Verzeichnisname innerhalb des ZIP-Archivs angegeben werden. Das Element wird aus dem ZIP-Archiv in das TEMP-Verzeichnis extrahiert, eingelesen und sofort wieder gelöscht.
? Ist mit dem Kommando FILE ein Dateiname definiert worden, so wird beim Kommando READ ohne Dateinamen die voreingestellte Datei eingelesen.
str-var String-Variable, die den Dateinamen enthält.
STDIN Die Daten werden von der Systemdatei STDIN gelesen. Das Einlesen von STDIN ist nur möglich, wenn beim Laden eine STDIN - Datei mittels des Pipe-Zeichens zugewiesen wird. In der Regel wird diese Variante nur bei EDT-Prozeduren zum Einsatz kommen. Das Einlesen der STDIN-Datei kann auch mit dem Schalter -stdin beim Laden des EDTW erfolgen.
Beispiel: prog | edtw.exe –iprocfile.edt.
Format und Sätze und Spalten aus Datei auswählen
rngcol Zeilen - und/oder Spaltenbereich der zu lesenden Zeilen. Die Zeilennummer bezieht sich auf die logischen Zeilennummern. Beispielsweise werden mit 0.0001-0.0005 die ersten 5 Zeilen der Datei eingelesen. Mit 0.0001-0.0005:1-3: werden die Spalten 1-3 der ersten 5 Zeilen eingelesen. Wenn statt des Dateinamens eine String-Variable angegeben wurde, ist die String-Variable von der Bereichsangabe rngcol durch ein Komma zu trennen. Es können mehrere Zeilen- und oder Spaltenbereiche durch Komma getrennt angegeben werden. Die Zeilen können auch durch Line-Variable und die Spalten durch Integer-Variable angegeben werden. Die Bereichsangabe wird nicht ausgewertet, wenn die Datei binär eingelesen wird.
BINARY Die Datei wird unabhängig von evtl. vorhandenen Satzstruktur im Format einer Binärdatei (siehe oben) in den Arbeitsbereich eingelesen.
rngbyte rng [,rng.....]
rng { int | intvar | $-int } - { int | intvar | $[-int] }
Bereich der einzulesenden Bytes im Binärmodus. Die Bereichsangabe kann direkt als Integer, als Integer-Variable oder als "Dateiende - Anzahl" angegeben werden. Die Bereiche können sich auch überlappen. Die Daten werden insoweit mehrfach eingelesen.
int Erstes bzw. letztes einzulesendes Byte als Ganzzahl.
intvar Integer-Variable mit der Nummer des Bytes
$-int Distanz zum Dateiende.
Beispiele:
@set#i1=1
@set#i2=10000
1-10000,1-100
Bytes 1-10000 und 1-100
#i1-#i2        Bytes 1-10000
$-10000-$      Die letzten 10000 Bytes der Datei
#i2-20000      Bytes 10000 bis 20000
$-#i2-$        Die letzten 10000 Bytes der Datei
RECORD Die Datei ist satzstrukturiert, enthält jedoch Sätze mit einer Länge größer als die maximale Satzlänge. In diesem Modus werden die Sätze, die länger sind, in Teilsätzen mit der maximalen Satzlänge im Arbeitsbereich dargestellt. Beim Zurückschreiben werden diese Teile wieder zu einem langen Satz zusammengefügt.
Daten-Aufbereitung
STRIP Löscht die Leerzeichen am Ende jeder eingelesenen Zeile. Besteht eine Zeile nur aus Leerzeichen, werden alle Leerzeichen gelöscht, die Zeile bleibt jedoch erhalten. Diese Option ist nur bei satzstrukturierten Dateien möglich. Enthält die Datei Sätze größer als die maximale Satzlänge, wird die gleiche Satzbehandlung wie mit der Option R durchgeführt.
KEY Die ersten 8 Zeichen jedes einzulesenden Satzes werden als Schlüssel interpretiert. Die Sätze, die in den Arbeitsbereich eingelesen werden, erhalten diesen Schlüssel als Zeilennummer und nicht als Teil des Zeileninhalts. Dabei wird geprüft, ob in den ersten 8 Zeichen jeder Zeile ein gültiger Schlüssel steht Ziffern 0 bis 9).
TABULATOR Nach dem Einlesen wird das Kommando STT ausgeführt. Dadurch werden Leerzeichen durch ein Tabulatorzeichen ersetzt. Vor dem Schreiben mit dem Kommando WRITE ohne Angabe eines Dateinamens wird automatisch das Kommando TTS ausgeführt, so dass die Tabulatorzeichen wieder in Leerzeichen umgewandelt werden. Dadurch wird erreicht, dass während des Editierens die Tabulatorfunktion genutzt werden kann, ohne dass Tabulatorzeichen gespeichert werden müssen.
Diese Option kann z.B. dazu genutzt werden, um BS2000-Assembler-Sourcen zu bearbeiten. Durch Einstellung einer Tabulatorschrittweite von 71 wird erreicht, dass alle Leerstellen vor der Spalte 71 durch ein Tabulatorzeichen ersetzt werden. Die Spalten 72-80 (Fortsetzungszeichen und Numerierung) werden dann nicht verschoben, wenn in den Spalten 1-71 ein Zeichen gelöscht oder eingefügt wird. Der Tabulator, der über das Kommando TABS eingestellt wird, kann zusätzlich für die Spalten 1-71 genutzt werden.
OPEN-Modus
OPEN Die Daten werden nicht in den Arbeitsspeicher eingelesen. Im Speicher wird nur ein Verzeichnis der Datensätze mit den Plattenadressen angelegt. Benötigte Daten der Eingabedatei werden bei Bedarf direkt von der Platte gelesen. Neue bzw. geänderte Datensätze werde in eine temporäre Datei geschrieben. In diesem Modus kann eine Datei mit max. 1.024 GB editiert werden.
Beim Zurückschreiben der geänderten Datei mit dem Kommando WRITE werden die Daten aus der Eingabedatei und der temporären Datei zusammengefügt und in die Ausgabedatei geschrieben. Soll die eingelesene Datei überschrieben werden, so werden die Daten zuerst in eine temporäre Datei geschrieben. Danach wird die Originaldatei gelöscht und die temporäre Datei umbenannt.
Die Eingabedatei bleibt währen der Bearbeitung geöffnet und kann somit in dieser Zeit von einem anderen Prozess nicht gelesen oder überschrieben werden. Im Open-Modus gibt es keine Einschränkungen beim Editieren. Die einzige Ausnahme besteht darin, dass keine AUTOSAVE-Datei und beim Schreiben keine BACKUP-Datei erstellt wird. Auch UNDO- und Redo-Aktionen sind wie im Normalmodus möglich.
Codierung (UNICODE-Dateien)
code CHAR | UTF | UCB | UCL
Falls einzulesende Dateien einen UNICODE-Header (Byte Order Mark) oder ein XML-Header enthalten, wird automatisch die richtige Codierung verwendet. Die Angabe der Codierung ist dann nicht notwendig. Ist ein Header vorhanden und weicht das angegebene Format von den Angaben im Header ab, wird eine Fehlermeldung ausgegeben.
UTF16-Dateien (UCB oder UCL) ohne UNICODE-Header werden in der Regel anhand des Satzende-Kennzeichens innerhalb der ersten 5000 Bytes erkannt und werden ebenfalls automatisch richtig eingelesen.
UTF8-Dateien können anhand von UTF8-Zeichenfolgen innerhalb der ersten 5000 Bytes automatisch erkannt werden, falls die entsprechende Option im Menü Optionen / Code / Dateien ohne Unicode-Header aktiviert ist.
CHAR Datei im Ein-Byte-Format. Dieses Format wird automatisch benutzt, falls kein UNICODE-Header vorhanden ist (siehe hierzu auch Menü Optionen / Code / Dateien ohne Unicode-Header). Die Option CHAR wird auch bei UNICODE-Dateien mit Header akzeptiert. In diesem Fall wird ein evtl. vorhandener Header ebenfalls als Daten eingelesen und jedes UNICODE-Zeichen als zwei Zeichen dargestellt.
UTF Datei im UTF-8-Format. UTF-8 (Abk. für 8-Bit Unicode Transformation Format) ist die am weitesten verbreitete Codierung für Unicode-Zeichen. Dabei wird jedem Unicode-Zeichen eine speziell codierte Bytekette von variabler Länge zugeordnet. UTF-8 unterstützt bis zu vier Byte, auf die sich wie bei allen UTF-Formaten alle 1.114.112 Unicode-Zeichen abbilden lassen. Das UTF-8-Header enthält X'EFBBBF'
UCB UTF-16BE Unicode Big-Endian (höherwertiges Byte zuerst). UTF-16 (Abk. für 16-bit Unicode Transformation Format) ist eine Codierung, bei der jedes Unicode-Zeichen mind. 16 Bit belegt. Unicode-Zeichen, deren Code sich nicht mit 16 Bit darstellen läßt, belegen zwei 16-Bit-Wörter (code units). Das UTF-16-Header enthält X'FEFF'.
Das höherwertige Byte steht in den ersten 8 Bits, z.B. Die Zahl "0" (X'30') erhält den Wert X'0030'.
UCL UTF-16LE Unicode Little-Endian (niederwertiges Byte zuerst). Das UTF-16-Header enthält X'FFFE'.
Das niederwertige Byte steht in den ersten 8 Bits, z.B. Die Zahl "0" (X'30') erhält den Wert X'3000'.
Beispiele:
read'datei1'
Die Datei datei1 wird vollständig eingelesen
read'datei1'o
Die Datei datei1 wird im Open-Modus vollständig eingelesen.
read'datei2'0.0001-1,5-6:21-30,1-10:
Von der Datei datei2 werden die Sätze 1 bis 10.000, und 50.000 bis 60.000 eingelesen. Von jedem Satz werden nur die Spalten 20-30 und 1-10 in den Arbeitsbereich übertragen. Die Spalten werden so umorganisiert, dass in den ersten 10 Spalten des Arbeitsbereichs die Spalten 21-30 der Datei und in den Spalten 11-20 des Arbeitsbereichs die Spalten 1-10 der Datei stehen.
read'datei2'b$-10000-$
Die Datei wird im Binärformat eingelesen. Von der Datei datei2 werden nur die letzten 10.000 gelesen.
read'datei3'b1-10000,50000-60000
Die Datei wird im Binärformat eingelesen. Von der Datei datei3 werden nur die Bytes 10.000 bis 20.000 und 50.000 bis 60.000 gelesen.
par varsubst=y
read 'datei1..!user'
!user wird durch den Benutzernamen ersetzt (nur Win-NT), z.B. datei1.benutzer1
read#s1,0.0001-1
Von der Datei, dessen Name in der Variablen #s1 steht, werden die ersten 10.000 Sätze eingelesen.
read test.zip(verz1/test1.src)
Das Element verz1/test1.src aus dem ZIP-Archiv test.zip wird in den aktuellen Arbeitsbereich eingelesen.