Lade...
 

CX_ASCII_FILE - ASCII-Datei

CX_ASCII_FILE CX_ASCII_FILE.png  Iterable

Klassenhierarchie
Beschreibung:

Ein Objekt dieser Klasse bezieht sich auf eine ASCII-Datei, stellt Methoden zum Lesen und Schreiben sowie für einfache Dateioperationen zur Verfügung. (Für die Verwaltung von Dateien selbst steht die Klasse CX_FILE_INFO zur Verfügung).

Dateikodierung

Die Klasse unterstützt mehrere gängige Dateikodierungen (nicht nur ASCII).

Beim Lesen von Dateien mit bekannter Kodierung sollte die Kodierung vor dem Öffnen der Datei immer Lesen explizit gesetzt werden. Falls die Kodierung nicht bekannt ist, sollte DetectCodepage verwendet werden, um die Codepage (falls möglich) aus dem Dateiinhalt zu ermitteln. 

Beim Schreiben von Dateien sollte immer die Kodierung explizit gesetzt werden, die von der empfangenden Dateischnittstelle definiert wurde. Falls nichts definiert wurde, sollte die UTF-8-Kodierung verwendet werden, die alle Zeichen effizient darstellen kann und von den meisten modernen Programmen unterstützt wird.

Achtung: Die voreingestellte Kodierung wurde ab Dll-Version 228586 von CP850 auf UTF-8 geändert.

Hinweis: Über den Befehl TransTable können Byte-Übersetzungstabellen für das Einlesen mittels Read angemeldet werden. Diese werden auf die eingelesenen Daten angewendet, BEVOR die Konvertierung aus der eingestellten Dateikodierung in die Kodierung des ClassiX-Systems (UTF-8) durchgeführt wird. Hierdurch lassen sich beliebige Codepages unterstützen - sogar ASCII-inkompatible wie EBCDIC!

Satzformate

Es werden sowohl variable Sätze sowie Sätze mit fester Länge und festen Datenpositionen unterstützt:

Format Satzlänge (beim Lesen) Datenfelder
fix a) festen Wert vorgeben
b) Wert 0 angeben - Endekennzeichen \r oder \n definiert Satzlänge - SetRecordFormat
a) Länge vorgeben (Felder folgen unmittelbar nacheinander)
b) Position und Länge vorgeben - SetRecordFormat
variable Kennzeichen für Satzende - SetRecordSeparator Trennzeichen - SetFieldSeparator

Default-Einstellung für Lesen: ist variable Satzlänge, das Satzende bestimmt NL, CR oder eine Kombination aus beiden.
Während der Benutzung einer Datei kann das Satzformat geändert werden, so dass beispielsweise zunächst Daten in variabler Form und dann in einer fixen Satzstruktur geschrieben werden können. Daher beherrscht diese Klasse beide Satzformate gleichzeitig.

Anwendungs-Beispiele:     

  1. Im-/Export von Daten   
  2. Datanorm-Schnittstelle   

 

CSV-Import:

Da der Import von Daten im CSV-Format besonders oft vorkommt, sind hier einmal die Optionen aufgeführt, die beim CSV-Import beachtet werden sollten.

  1. SetFieldSeparator sollte für CSV in der Regel auf "," gesetzt werden, jedoch exportiert Microsoft Excel die Felder mit ";" als Trennzeichen. Im Zweifel muss hier in die Datei geguckt werden.
  2. Gemäß RFC 4180 dürfen Felder Trennzeichen und Zeilenumbrüche enthalten, wenn die Werte in Anführungszeichen eingeschlossen sind. Dieses Verhalten ist für CX_ASCII_FILE standardmäßig deaktiviert und muss per Aufruf von ContainsStrings aktiviert werden. Hierbei ist zu beachten, dass die Anführungssstriche dann strikt paarig sein müssen. Manche CSV-Exporte messen Anführungszeichen keine besondere Bedeutung bei, in dem Fall darf ContainsStrings nicht verwendet werden.
  3. Falls ContainsStrings verwendet wird, dann gibt es zwei Optionen, wie Anführungszeichen in einem Feld dargestellt werden sollen. ClassiX verwendet standardmäßig die Sequenz \" und der RFC 4180 legt hierfür "" fest. Falls Anführungszeichen innerhalb von Feldern vorkommen, dann sollte die Datei untersucht werden, um festzustellen, welcher Stil verwendet wird. Um den RFC-Konformen Stil zu verwenden, muss die Methode EscapeQuotesRFCConform aufgerufen werden.
  4. CSV-Dateien können auch Sonderzeichen, Umlaute & co. in Feldern enthalten. Um sicherzustellen, dass diese korrekt eingelesen werden, sollte DetectCodepage und SetCodepage verwendet werden oder die Datei in einem Editor wie Notepad++ geöffnet werden, damit dieser die Zeichenkodierung der Datei bestimmen kann und diese muss über einen der folgenden Aufrufe gesetzt werden.

 

Code-Beispiel:

Var(inputFile)
CreateTransObject(CX_ASCII_FILE) -> inputFile
"CX_ROOTDIR\\test.txt" inputFile Put(fileName)

do {
  LocalVar(record)
  inputFile Call(Read) Revert -> record
  inputFile Call(Eof) if break
  // record hier verarbeiten
} loop
inputFile Call(Close)    // Datei schließen

 

181614 ist CX_ASCII_FILE iterierbar und das obige Beispiel kann wie folgt vereinfacht werden

Code-Beispiel:
Var(inputFile)
CreateTransObject(CX_ASCII_FILE) -> inputFile
"CX_ROOTDIR\\test.txt" inputFile Put(fileName)

inputFile iterate {
  LocalVar(record)
  Revert -> record
  // record hier verarbeiten
}

inputFile Call(Close)  //Datei schließen
Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
AcceptInvalidPackedDataFields       beim falsch gepackten Datenfeldern keine Fehlermeldung
ANSICode       Setzen des ANSI-Zeichensatzes
Append       Ausgabe an Datei anhängen
BuildIndexFile   (INTEGER, INTEGER)   Aufbau einer Index-Datei
CheckIndex   (INTEGER) VECTOR Statistik über Effektivität des Hash-Algorithmus. 
Close       Schließen einer Datei
ContainsStrings       gequotete Strings beim Lesen im variablen Satzformat besonders behandeln (keine Bedeutung für festes Satzformat und Schreiboperationen)
CopyFile   (STRING, INTEGER)   Kopiert eine Datei an eine andere Stelle 
CP850Code       Setzen des ISO/CP850-Zeichensatzes
Create       Datei erzeugen
Delete       Löscht die Datei und deren Indexdatei
DetectCodepage
228519
    STRING Versucht den Zeichensatz der Datei anhand des Dateiinhalts zu ermitteln.
Eof     INTEGER Testet das Dateiende
EscapeQuotesRFCConform       Aktiviert RFC 4180 konforme Zeichenkettenbehandlung für CSV-Dateien
Exists   (STRING) INTEGER Prüfen, ob eine bestimmte Datei existiert
FileExchange       Wechselt die Datei
FileLength     INTEGER Dateigröße in Bytes
FilePos     INTEGER Position des Dateizeigers
GetDirInfo   (STRING) CX_FILE_INFO Rückgabe Verzeichnis-Informationen
GetFieldFromBuffer   (INTEGER) STRING Rückgabe eines bestimmten Feldes des Pufferbereichs
GetFileInfo     CX_FILE_INFO Rückgabe Datei-Informationen
IsOpen     INTEGER Prüfen, ob die Datei geöffnet ist
MoveFile   (STRING)   Verschiebt eine Datei aus einem Verzeichnis in das angegebene Verzeichnis. 
Open       Öffnen einer Datei
PackedDataFields   (VECTOR)   in IBM-Format gepackte Datenfelder bestimmen 
Read     VECTOR Lesen des nächsten Satzes
ReadIntoBuffer       Lesen des nächsten Satzes in das Pufferbereich
ReadVariableFieldsReplaceHexNull   (STRING) VECTOR Lesen des nächsten Satzes, wobei alle Null-Bytes durch den Parameter ersetzt werden.
Ready
Bis Dll-Version 228508
      Synchronisation für parallelen Zugriff auf das gleiche CX_ASCII_File-Objekt
ReformatRecord   (VECTOR, INTEGER)   Ändern eines festen Satzformates
ReRead   VECTOR VECTOR Satz wird wiederholt gelesen
Seek   (STRING) INTEGER Suchen eines bestimmten Satzes
SetBufLength   (INTEGER)   Setzt die Pufferbereichgröße
SetCodepage
228519
  STRING   Setzt den Zeichensatz zum Lesen/Schreiben der Datei.
SetFieldSeparator   (STRING)   Feld-Trenner festlegen
SetRecordSeparator   (STRING)   Satz-Trenner festlegen
SetKey   (INTEGER)   Schlüsselfeld festlegen
SetLeftAdjusted   (INTEGER, STRING, STRING)   Linksbündiges Schreiben in den Pufferbereich
SetMaxKeyLength   (INTEGER)   Schlüsselfeldlänge festlegen
SetReadOnly       Schreibschutz setzen
SetRecordFormat   (VECTOR, INTEGER, INTEGER)   Setzen eines festen Satzformates
SetRecordSeparator   (STRING)   Satz-Trenner festlegen
SetRightAdjusted   (INTEGER, STRING, STRING)   Rechtsbündiges Schreiben in den Pufferbereich
SetSkipCRLF   (INTEGER) INTEGER CR/LF an Satzende ignorieren
SetSkipHexNull   INTEGER INTEGER Sätze bei Hex-Null abschneiden statt Fehlermeldung
Update   (VECTOR)   Verändern eines Satzes
UpdateFromBuffer       Verändert einen Satz mit den Daten des Pufferbereichs
UTF8Code       Setzt die Codepage auf UTF-8
UTF8BOMCode       Setzt die Codepage auf UTF-8 (mit Byte-Order-Mark)
UTF16BigEndianCode       Setzt die Codepage auf UTF-16 (mit Big-Endian)
UTF16LittleEndianCode       Setzt die Codepage auf UTF-16 (mit Little-Endian)
UTF32LittleEndianCode
235593
      Setzt die Codepage auf UTF-32 (mit Little-Endian)
Wait
Bis Dll-Version 228508
      Synchronisation für parallelen Zugriff auf das gleiche CX_ASCII_File-Objekt
Write   (VECTOR)   Schreiben eines Satzes
WriteByte   (INTEGER)   Schreiben eines Bytes in die Datei
WriteFromBuffer       Schreibt den Pufferbereich als nächsten Satz
ZonedDataFields   (VECTOR)   in IBM-Format gepackte Datenfelder bestimmen 

* MA = Member-Access-Funktion

 

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
nameOfExchangeFile STRING     siehe FileExchange
fileName STRING     Dateiname

* I = Indizierbares Datenfeld

 

Verwendung in AppsWH
Modul Kurzbeschreibung
dtausedt.mod DTAUS Datei Editiermodul