-
%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
-
 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
-
%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 ?
-
%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).
-
%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;
-
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
-
%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
-
n'Abend Haertl,
 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
-
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.
-
Chain
Es gibt übrigens auch einen Abbruch (schon in RPGIII!) wenn man mit einem CHAIN versucht den 1. Satz aus einer leeren Subfile einzulesen.
Similar Threads
-
By Anette in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 24-07-06, 20:52
-
By borwegen in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 30-06-06, 09:04
-
By steven_r in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 30-05-06, 08:40
-
By steven_r in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 22-05-06, 13:56
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks