[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2004
    Beiträge
    19

    %eof für Subfile

    Hallo, ich möchte in freeformat RPG mit %eof(Subfilename) EOF abfragen.
    Der Compiler spuckt mir folgende Fehlermeldung aus:

    F*
    FPCFAXPARB CF E WORKSTN
    F SFILE(SUBF:POSIT)
    F*


    1681 DOU %EOF(SUBF) OR *IN03;
    ======> aaaa
    *RNF0391 20 a 013500 Parameter SUBF ist für die integrierte Funktion %EOF
    ungültig. %EOF wird ignoriert.
    1682 READC SUBF;


    Codiere ich das ganze in fixed Format mit Bezugszahlen, dann funktioniert es. Ich habe V5R2 auf der Maschine. Was muß ich ändern ? Danke für alle Antworten

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von haertl
    Hallo, ich möchte in freeformat RPG mit %eof(Subfilename) EOF abfragen.
    Der Compiler spuckt mir folgende Fehlermeldung aus:

    F*
    FPCFAXPARB CF E WORKSTN
    F SFILE(SUBF:POSIT)
    F*


    1681 DOU %EOF(SUBF) OR *IN03;
    ======> aaaa
    *RNF0391 20 a 013500 Parameter SUBF ist für die integrierte Funktion %EOF
    ungültig. %EOF wird ignoriert.
    1682 READC SUBF;


    Codiere ich das ganze in fixed Format mit Bezugszahlen, dann funktioniert es. Ich habe V5R2 auf der Maschine. Was muß ich ändern ? Danke für alle Antworten
    Hallo,

    bei %EOF muss grundsätzlich der Datei-Name und nicht der Format-Name angegeben werden!

    Du hast 2 Möglichkeiten:
    1. Entweder kannst Du im DoU %EOF ohne Angabe eines Datei-Namens setzen, was m.E. eine heikle Angelegenheit ist.
    Was heute klappt kann morgen durch eine Änderung zerschossen werden.
    2. Du fragst %EOF direkt nach dem ReadC ab und verlässt dann die Schleife mit LEAVE. Dies ist die sauberere Lösung.

    Ein %EOF mit Angabe einer Display-File habe ich zugegebenermaßen noch nicht probiert, dürfte jedoch nicht funktionnieren, da Display-Files i.d.R. mehr als 1 Format haben.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Jul 2004
    Beiträge
    19

    %eof wird ignoriert

    0131.00 C*** *IN93 DOUEQ '1'
    0132.00 C*** *IN03 OREQ '1' F3
    0133.00 C*** *IN12 OREQ '1' F12
    0134.00 /FREE
    0135.00 DOU %EOF OR *IN03;
    0136.00 READC SUBF;
    0137.00 /END-FREE
    0138.00 C*** READC SUBF 9393 ERR/EOF
    0139.00 /FREE
    0140.00 IF NOT %EOF;
    0141.00 /END-FREE
    0142.00 C*** *IN93 IFEQ '0'
    0143.00 C*** EXSR DATVER DATEI VERARB
    0144.00 C*** ENDIF
    0145.00 C*** ENDDO
    0146.00 /FREE
    0147.00 EXSR DATVER;
    0148.00 ENDIF;
    0149.00 ENDDO;
    0150.00 Hallo Birgitta, wenn ich im fixed Format codiere (siehe C***) dann funktioniert es.
    Wenn ich die free Format Befehle (siehe oben) nutze, bekomme ich bei leerem Subfile einen Einheitenfehler, weil der READC SUBF trotz EOF keine '1' setzt. IF NOT %EOF wird dann ausgeführt obwohl End of File zutrifft. Enthält das Subfile Datensätze dann funktioniert es auch in free Format. Noch eine Idee ?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    %EOF ist leider nur für Dateien realisiert !
    Du kannst entweder mt "Monitor" abfangen oder Fix-Format verwenden.

    (Auch IBM ist manchmal etwas nachlässig).
    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

  5. #5
    Registriert seit
    Jul 2004
    Beiträge
    19

    %error statt %eof

    Ich habe den Fehler. Wenn READC keinen DS lesen kann, weil
    das Subfile leer ist, dann wird offensichtlich nicht %EOF ausgelöst,
    sondern %ERROR. Mit folgendem Code gehts.



    DOU %EOF OR %ERROR OR *IN03;
    READC(E) SUBF;
    IF NOT %EOF AND NOT %ERROR;
    EXSR DATVER;
    ENDIF;
    ENDDO;

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Aha, wieder was gelernt !

    Aber dass du auf eine leere Subfile mit READC losgehst ist auch nicht unbedingt korrekt. Merke dir die Anzahl Sätze die du geschrieben hast doch in einem Hidden-Feld im Control-Format. Das wäre eine korrekte Programmierung
    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

  7. #7
    Registriert seit
    Jun 2002
    Beiträge
    30

    %eof Subfile

    Hallo Haertl,

    %eof in Zusammenhang mit Subfile funktioniert definitiv (siehe auch Referenzhandbuch!)

    Auszug aus einen (funktionierenden) Programm:
    readc SUB01S
    if %eof
    eval MsgQId = 'MSG6010'
    exsr $SendMsg
    endif
    dow not %eof
    ...

    Beachte: wenn in deinem UP DATVER Dateioperationen verwendet werden, ändert sich natürlich %eof entsprechend!

    Gruss ERTH

  8. #8
    Unregistriert Besucher/Guest
    n'Abend Haertl,

    Zitat Zitat von haertl
    0131.00 C*** *IN93 DOUEQ '1'
    0132.00 C*** *IN03 OREQ '1' F3
    0133.00 C*** *IN12 OREQ '1' F12
    0134.00 /FREE
    0135.00 DOU %EOF OR *IN03;
    0136.00 READC SUBF;
    0137.00 /END-FREE
    0138.00 C*** READC SUBF 9393 ERR/EOF
    0139.00 /FREE
    0140.00 IF NOT %EOF;
    0141.00 /END-FREE
    0142.00 C*** *IN93 IFEQ '0'
    0143.00 C*** EXSR DATVER DATEI VERARB
    0144.00 C*** ENDIF
    0145.00 C*** ENDDO
    0146.00 /FREE
    0147.00 EXSR DATVER;
    0148.00 ENDIF;
    0149.00 ENDDO;
    0150.00 Hallo Birgitta, wenn ich im fixed Format codiere (siehe C***) dann funktioniert es.
    Wenn ich die free Format Befehle (siehe oben) nutze, bekomme ich bei leerem Subfile einen Einheitenfehler, weil der READC SUBF trotz EOF keine '1' setzt. IF NOT %EOF wird dann ausgeführt obwohl End of File zutrifft. Enthält das Subfile Datensätze dann funktioniert es auch in free Format. Noch eine Idee ?

    %eof kann mit readc benutzt werden. ich glaube, dass es nicht mit %eof(bsname) funktioniert, aber nur %eof tun's!
    der codeschnipsel lässt befürchten, dass du zuviel funktionalität in die schleife gepackt hast. es wundert mich nicht, wenn das programm nicht so, wie gewünscht funktioniert (sorry, aber *in03 in der schleife lässt mich schlimmes ahnen!).

    mein ansatz:

    wenn subfile gefüllt (sfldsp = *on)!!!
    machwas = *ON

    dow machwas

    readc subformat
    if %eof
    leave
    endif
    jetzt kannst du gefahrlos alles machen

    enddo

    die funktionen %eof, %error, %found, ... liefern (wenn nicht spezifiziert) den Wert der letzten %eof-fähigen, usw. operation! das wird wohl iregendwo im DATVER passieren.

    %error in deiner ergänzung fängt nur den fehler leere subdatei ab und hat nur deshalb mit readc etwas zu tun.



    Bogomil

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn du auf eine leere Subfile einen READC löst, wird NIE %eof ausgelöst sondern immer %error, das gilt auch beim konventionellen READC mit Bezugszahlen. Hier ist es sogar so, dass eine RPG-Fehlermeldung ausgegeben wird, wenn die 2. Bezugszahl beim READC nicht angegeben ist.
    Besser ist es aber tatsächlich immer, sich zu merken ob die Subfile Daten enthält. Mögliche Fehler sollte man VORHER abfragen und nicht erst eintreten lassen.

    Ich könnte ja schließlich auch eine Null-Division mit Monitor abfangen anstatt vorher den Divisor abzufragen.
    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

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928

    Chain

    Es gibt übrigens auch einen Abbruch (schon in RPGIII!) wenn man mit einem CHAIN versucht den 1. Satz aus einer leeren Subfile einzulesen.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Cursor in Subfile - Cobol
    By Anette in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 24-07-06, 20:52
  2. KEYED DATA QUEUES SUBFILE DESCEND RPGLE
    By borwegen in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-06-06, 09:04
  3. subfile erste seite
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-05-06, 08:40
  4. Subfile Drop
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 22-05-06, 13:56
  5. Subfile aus einer Subfile?
    By Toschie in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-06-05, 14:21

Berechtigungen

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