[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #14
    Registriert seit
    Aug 2006
    Beiträge
    47
    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. ;-)

  3. #15
    Registriert seit
    Oct 2013
    Beiträge
    171
    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.

  4. #16
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    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

  5. #17
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... 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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #18
    Registriert seit
    Jan 2008
    Beiträge
    122
    bin zufällig auf diesen beitrag gestossen; wie wurde das problem tatsächlich gelöst ?

  7. #19
    Registriert seit
    Aug 2006
    Beiträge
    47
    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

  8. #20
    Registriert seit
    Oct 2013
    Beiträge
    171
    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
    FehlermeldungDatei 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

  1. CPYFRMIMPF Problem
    By heynem in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 09-05-03, 07:00
  2. Datentransfer von PC zur AS400 - CPYFRMIMPF?
    By mott in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 16-04-02, 20:41
  3. Cpyfrmimpf
    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
  •