[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2007
    Beiträge
    7

    Write IFS files mit fputs() API

    Hallo!
    Ich habe Scott Klement's IFS APIs aus der Mai-Ausgabe runtergeladen und getestet. Das Beispielprogramm zum Lesen von Streamfiles (mit fgets() API)klappte auf Anhieb. Probleme habe ich beim Schreiben mit fputs().
    Hat das schon jemand probiert und hat ein Snippet als Beispiel?
    Satzende mit CRLF!
    Ich bekomme immer einen Versatz in der Ausgabedatei, indem das CR am Ende des Satzes und das LF am Anfang der neuen Zeile steht. Ich bekomme CRLF nicht zusammen an das Satzende.
    Jede Hilfe wird gerne angenommen!

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    Hallo, die Variante mit fput usw. kenne ich gar nicht, kenne nur das mit read und write.
    But anyway...
    Wie fügst Du denn das Ende hinzu? Gar nicht oder so in der Art?

    CONST(X'0d25')

    Das müsste doch einen CRLF erzeugen?

    Grussle

    k.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    fputs() schreibt nur Strings, die mit x'00' beendet sind.
    fgets() liest bis zum CRLF bzw. Dateiende, ggf. mit "Pufferüberschreibung" (bekannte M$-Sicherheitslücken) wenn der Eingabepuffer zu kurz ist.

    read() ist da allemal sicherer.

    Ansonsten gilt natürlich:
    Gibst du in ASCII/ANSI direkt aus, so sind die Codes x'0D0A' (in EBCDIC eben x'0D25') selber auszugeben.
    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

  4. #4
    Registriert seit
    May 2007
    Beiträge
    7

    Write IFS files mit fputs()

    Hallo,

    ich gebe x'0D0A' explitit hinter dem Text aus.
    Wie ist das aber mit dem Null-terminated String? Muß man da hinter dem CRLF noch x'00' ausgeben?
    Danke.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    int fputs(const char *string, FILE *stream);

    Durch die Prototyp-Deklaration "options(*string)" fügt die Runtime automatisch das X'00' an, da sie eine temporäre Kopie des Ausgabepuffers erstellt.

    Ob nun x'0A' für LF der richtige Code ist, kommt auf die Open-Anweisung an.
    Wenn du die Daten in EBCDIC ausgibst und auf Grund der "CCSID=1252" die Codewandlung automatisch ausführen läßt, musst du x'25' für LF (EBCDIC) ausgeben.

    X'0A' kannst du nur nehmen, wenn du die Codewandlung EBCDIC->ANSI selber durchführst.
    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
    May 2007
    Beiträge
    7

    Write IFS files mit fputs()

    Hallo,
    hier mein Beispiel:
    Input-Datei TEST (PF), Field is FLD1, 3 Records (CCSID = 273)fficeffice" />>>
    ....+....1....+
    AAAAAAAAAA >>
    BBBBBBBBBB >>
    CCCCCCCCCC >>
    > >
    Output-Streamfile in Hex (CCSID = 273)>>
    Rec1: C1C1C1C1 C1C1C1C1 C1C10D
    >>
    Rec2: 0AC2C2C2 C2C2C2C2 C2C2C20D

    Rec3: 0AC3C3C3 C3C3C3C3 C3C3C30D
    >>
    Rec4: 0A0D

    Program Code Snippets:>>
    FTEST IF E DISK>>
    > >
    D fputs PR 10I 0 ExtProc('_C_IFS_fputs') >>
    D string * value options(*string) >>
    D stream like(pFILE) value >>
    > >
    D CRLF C Const(x'0D0A')>>
    D String S 64A >>
    >>
    file = fopen(%trimr(filename): 'w');>>
    read TEST; >>
    dow not %eof(TEST); >>
    String = FLD1 + CRLF; >>
    if fputs(%trim(String):file) = -1; >>
    leave; >>
    endif; >>
    read TEST; >>
    enddo; >>
    >>
    fclose(file); >>
    return; >>

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die CCSID deiner Streamfile ist 273 und somit EBCDIC.
    In diesem Fall ist X'25' als LF-Code auszugeben.

    Ansonsten kannst du im fopen() auch erweiterte Attribute für die Codewandlung angeben.

    Trotzdem gilt x'0D25' als CRLF (du arbeitest ja nun mal in EBCDIC 273) und wird dann korrekt in die IFS-Datei ausgegeben.
    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

Similar Threads

  1. javamail api
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 22-11-06, 16:02
  2. Allgemeine Berechtigung für Jobs ... IFS Ordner ...
    By bode in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 30-10-06, 11:10
  3. Datei im IFS auf iSeries verschlüsseln
    By jo400 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 21-10-06, 17:57
  4. Windowstabelle wird im IFS in CCSID 1252 erstellt
    By umeis in forum NEWSboard Windows
    Antworten: 3
    Letzter Beitrag: 11-08-06, 12:45
  5. IFS API für Cobol
    By ltsrole in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-10-04, 14:36

Berechtigungen

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