-
1000er Trennzeichen werden tatsächlich von SQL nicht unterstützt.
CPYFRMIMPF verwendet intern nämlich SQL.
Um die Daten per SQL zu verarbeiten ist ein Replace der Punkte mit "Nichts" erforderlich um anschließend per CAST(TRIM(...)...) in Dezimal zu wandeln.
Also, wie der Vorredner schon sagt:
Importdatei mit Alphafeldern, SQL-View über die Alphafelder mit erforderlichen Casts.
Dann kann locker die View verwendet werden.
-
Danke für Tipps; ich werde wohl die SQL-Variante verwenden.
Trotzdem schade, dass es keinen "eigenen" Parameter im CPYFRMIMPF gibt (ähnlich zu DECPNT oder RPLNULLVAL).
Da ist wohl IBM gefordert. ;-)
-
Oder man lässt csv-Dateien von Programmierern erstellen, die wissen, was sie tun.
Nicht für jeden Schrott ist gleich IBM aufgerufen, was zu tun.
-
Stimmt!
Häufig sind CSV Dateien Excel 'Masken', erstellt vom Neffen vom Chef, in denen der Anwender ALLES machen kann.
Bsp.:
Datum der Abgabe: 08.04.2014, 14/04/08, 20140408 ,"Schnellstens"
Monat der Fertigstellung: Januar, Jan, 01, 01/2014, "bald"
Wert: 15,00 oder 1.500,99 oder "steht noch nicht fest"
fröhliches Schnitstellen gestalten mit SQL
-
... CPYFRMIMPF ist lediglich ein dümmlicher Name. Andere Datenbanken nennen solche Routinen load und unload. Sprich: die CSV Files kommen aus einer Datenbank, werden transportiert und dann landen sie wieder in einer anderen Datenbank - und wenn die Tabellen zueinander passen, dann geht das alles.
Für "echten" Schrott (Datum schnellstens etc.) hat CPYFRMIMPF die beiden Parameter ERRLVL, ERRRCDFILE und ERRRCDOPT (F1 und lesen macht schlauer). Mit den Tausenderpunkten ist das so eine Sache, das könnte CPYFRMIMPF händeln und sollte es wohl auch tun. EIn search/replace ist wohl zu wenig, der würde auch "." in Strings entfernen, sich dafür einen Filter zu schreiben, sollte wohl jeder Programmeur-AZUBI hinbekommen...
D*B
-
bin zufällig auf diesen beitrag gestossen; wie wurde das problem tatsächlich gelöst ?
-
Die Daten stammen von einem Kunden und werden auf einem FTP-Server bereitgestellt, von wo sie dann abgeholt werden; eine Vorlauf-Routine in der "PC-Welt" (das aufgrund der Problemstellung von einem Dienstleister erstellt wurde) entfernt dann in den relevanten Feldern die Tausenderpunkte.
Wie das technisch geschieht, weiß ich selbst nicht; ich erhalte die bereinigte Datei in einem IFS-Folder, von dort kann sie dann problemlos mit CPYFRMIMPF in die AS400 importiert werden.
fpxx
-
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.
Similar Threads
-
By heynem in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 09-05-03, 07:00
-
By mott in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 16-04-02, 20:41
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 30-07-01, 17:42
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks