Wurde höchstwahrscheinlich über eine Hilfsdatei mit ausschließlich Alpha-Feldern gelöst.
Andere Lösung:
Wir haben eine Funktion csvRead geschrieben, die nach jeder Zeile eine Prozedur oder ein Programm aufruft (Callback) und dieser eine Feldgruppe mit bis zu 999 Elementen zu je bis zu 1.024 varchar übergibt.
Zuvor ruft man csvInfo auf, das einem die Anzahl der Zeilen und Spalten usw. liefert. So kann man sein Programm vor falschen Dateien schützen.
PHP-Code:
C EVAL csvInfoDS = csvInfo(#IFSFile)
C IF csvInfoDS.cols <> 17
C* Fehlermeldung, Datei hat falsche Spaltenanzahl
C ENDIF
...
C CALLP csvRead(#IFSFile:
C %PADDR(Zeile): Adresse der Zeilen-Prozedur
C *BLANK: alternativ Programmname
C csvInfoDS) DS mit Infos über das csv-file
"Zeile" ist der Name einer Prozedur im selben Programm. Sie wird für jede Zeile der csv-Datei aufgerufen. Die hat so auszusehen:
PHP-Code:
P Zeile B
D PI
D csvInfoDS LIKEDS(csvInfoDS_T) CONST Info über csv-file
D row 10U 0 CONST aktuelle Zeilen-Nr
D csvval 1024 VARYING DIM(999) CONST Spalten-Werte
...
C EVAL myFeldA = csvval(1)
C EVAL myFeldB = csvval(2)
...
P E
So muss man sich über das Thema "csv" nur einmal den Kopf zerbrechen und kommt ohne Hilfsdatei aus und schränkt den anwendenden Programmierer nicht ein.
Hier kann man sich jedes einzelnen Feldinhaltes natürlich liebevollst annehmen und so fehlertolerant sein, wie man möchte.
Obwohl die Datei zweimal byteweise von vorn bis hinten durchgelesen wird (1x für csvInfo und 1x für csvRead), performt das sehr gut.
Bookmarks