[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2007
    Beiträge
    69

    CPYTOIMPF nochmals

    Hallo,
    habe mit folgenden Befehl:

    CPYTOIMPF FROMFILE(&BIBL/&FROMFILE) TOSTMF(&TOFILE) +
    MBROPT(*REPLACE) STMFCODPAG(*PCASCII) +
    RCDDLM(*CRLF) DTAFMT(*DLM) FLDDLM(';')

    eine CSV-Datei erstellt.


    Die nummerischen Felder sehen dann so aus:

    ;0 ;111 ;109
    ;0 ;812 ;784
    ;0 ;7100 ;6809
    ;0 ;7416 ;7115
    ;0 ;7669 ;7350
    ;0 ;7688 ;7367


    Es sind die führenden Nullen weg und linksbündig. Beim Empfänger ist das Ergebnis somit falsch.


    In der phy. Datei stimmt der Wert des Feldes. Wie kann man die führenden Nullen ausgeben bzw. das Feld rechtsbündig.


    Danke

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Dann hat der Empfänger ein Problem.
    CSV ist so definiert, dass führende Nullen nicht benötigt werden und somit eine linksbündige Darstellung erreicht wird.
    Excel kann die Daten so lesen.
    Möchtest du eine formatierte Ausgabe musst du das z.B. per SQL in eine PF und anschließend per CPYTOSTMF ins IFS ausgeben.
    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

  3. #3
    Registriert seit
    Oct 2013
    Beiträge
    171
    Das ist die allgemein übliche Aufbereitung.
    "Falsch" ist das Ergebnis nur dann, wenn der Empfänger die Daten falsch verarbeitet. Denn 111 ist numerisch durchaus das Gleiche wie 0000000111. Und auch das CPYFRMIMPF in die andere Richtung kann das verarbeiten.
    Relativ einfache Alternative: Zwischendatei, in der die numerischen Felder Alpha-Felder sind. Dort kann man sie mit führenden Nullen versehen, wie man lustig ist.
    Aufwändigere Alternative: eigenes Export-Programm (oder php-Skript, etc.) schreiben (und dem Empfänger verrechnen :-) ).

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Zitat Zitat von AG1965_2 Beitrag anzeigen
    Denn 111 ist numerisch durchaus das Gleiche wie 0000000111.
    Kommt drauf an. In C zum Beispiel nicht.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das musst du mir aber erklären, wie in C der numerische Wert 111 und 00..0111 zu unterscheiden ist.
    Immerhin ist ein numerischer Vergleich erst nach einem Umwandeln von CHAR nach INT/DOUBLE (atoi/scanf) möglich und da spielen Vornullen nun mal keine Rolle.
    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

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    0111 in C ist (wegen der vorangestellten Null) oktal und entspricht somit 73 dezimal.

    ILE C/C++ Language Reference - Integer Literals

  7. #7
    Registriert seit
    Oct 2013
    Beiträge
    171
    Ja, in diesem Thread geht's aber nicht um die Eigentümlichkeiten in diversen Sprachen, sondern um sowas Ähnliches wie csv-files.
    Und der C-Programmierer, der beim einem csv-Import solche Zeichenfolgen als oktale Zahl interpretiert, hat wohl in eher kürzerer als längerer Zeit ein Problem mit seiner Umwelt. :-)
    Für csv-files gibt es nun mal nicht so strenge Regeln wie für XML mit Schemas, aber auch dort erlebt man seine blauen Wunder ("Wir verarbeiten XML-Files im Textformat. Ihr XML-file ist in WordPad aber nur eine Zeile."). :-)

  8. #8
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Erwähnte ich bereits das ich mir deshalb eine View baue damit ich den Problemen aus dem Weg gehe?

    Ich kann dann casten bis der Arzt kommt und es alle Recht machen.

    Mich dünkt ich erwähnte es bereits......

    GG

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Pikachu Beitrag anzeigen
    0111 in C ist (wegen der vorangestellten Null) oktal und entspricht somit 73 dezimal.

    ILE C/C++ Language Reference - Integer Literals
    ... hört sich schlau an, ist aber Kohl, oder auch Kappes. Dein Verweis geht auf Integer literals, das zu den numeric literals gehört, das sind aber Zeichenketten sprich Strings und keine numerischen Werte.

    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/

Similar Threads

  1. CPYTOIMPF
    By AK1 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 27-08-14, 14:23
  2. CPYTOIMPF
    By alex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-06-03, 08:22
  3. Wer kennt sich mit CPYTOIMPF aus?
    By mott in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 02-05-02, 13:08
  4. Cpytoimpf
    By horst in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-07-01, 13:02
  5. Nochmal Cpytoimpf
    By horst in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 03-07-01, 07:54

Berechtigungen

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