[NEWSboard IBMi Forum]

Hybrid View

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

  2. #2
    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

  3. #3
    Registriert seit
    Oct 2013
    Beiträge
    175
    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, 08:00
  2. Datentransfer von PC zur AS400 - CPYFRMIMPF?
    By mott in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 16-04-02, 21:41
  3. Cpyfrmimpf
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 30-07-01, 18:42

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •