2017-01-23 11 views
1

Wenn ich ein RPG-Programm zu kompilieren, erhalte ich die Fehler unten gezeigt:RPG Kompilierungsfehler

*RNF7408 30  1 The length of the input field does not match the definition of the field; specification is ignored. 

Das Feld als Teil dieses Fehlers erwähnt EXITAX war, die der Größe 15,2 in WR654F und 9.2 in DA595F. Ich war unter der Annahme, dass dies auf zwei Dateien (WR654F und DA595F) fällig ist mit dem gleichen Namen ein Feld (EXITAX), aber unterschiedlicher Größe in den F-Spezifikationen erklärt haben:

FWR654F IF E    DISK 
FDA595F O A E   K DISK 

Aber als habe ich ein anderes Programm mit nur die obigen zwei Angaben und *inlr = *on für die Kompilierung, es funktionierte gut und kompiliert erfolgreich. Also verstehe ich nicht, warum das ursprüngliche Programm nicht kompiliert wird?

Antwort

3

Ich konnte den Fehler und die erfolgreiche Kompilierung reproduzieren. Sie sind in Ihrer Behauptung korrekt, dass der Fehler darauf zurückzuführen ist, dass das Feld in den beiden Dateien unterschiedlich definiert ist. Aber es erscheint nicht, wenn Sie nur mit den Dateidefinitionen und einer Rückgabe oder *INLR = *ON kompilieren. Der RPG-Compiler versucht offenbar nicht, O-Spezifikationen für DA595F zu generieren, es sei denn, Sie schreiben tatsächlich in die Datei. In Ihrem Test müssen Sie also eine write Operation zum Ausgabedatensatz hinzufügen. Dann sehen Sie den Fehler.

Nur für den Fall, dass Ihre nächste Frage lautet: "Wie repariere ich es?" Ein Weg wäre das Einlesen und Schreiben von Datenstrukturen. Wie folgt aus:

dcl-ds file1ds  LikeRec(file1r: *input) Inz; 
    dcl-ds file2ds  LikeRec(file2r: *output) Inz; 

    read file1 file1ds; 
    eval-corr file2ds = file1ds; 
    write file2r file2ds; 
+0

Oh ich sehe .. Ich habe nur den Schreibvorgang hinzugefügt und der Fehler kam auf. Danke, dass Sie wie immer sehr hilfsbereit sind, Mark! –

+0

Einfach eine normale Datenstruktur zu deklarieren funktioniert (oder ist das ein extern beschriebener DS. Entschuldigung für mein mangelndes Verständnis für Fully Free RPG)? Ich hatte den Eindruck, dass nur ein extern beschriebener DS oder ein I Spec funktionieren würde. –

+0

Sie sollten wirklich Free-Format RPG verwenden. Free Format wurde in den 1990er Jahren verfügbar und macht Programme leichter zu lesen und zu programmieren. Keine Notwendigkeit für I oder O Spezifikationen. Diese Datenstrukturen basieren auf dem Datensatzformat einer Datei, die in der Anweisung 'dcl-f' definiert ist. Ich gebe den zweiten Parameter ein, der für Datenstrukturen benötigt wird, die in IO-Operationen verwendet werden. – jmarkmurphy

1

Um zu verhindern, RPG aus den I- und O-Spezifikationen zu erzeugen, fügen Sie das QUALIFIZIERTE Schlüsselwort zu den Dateien. Dies führt auch dazu, dass die Datensatzformate anhand des Dateinamens qualifiziert werden. Anstatt also auf DA595FMT zu schreiben, würden Sie in DA595F.DA595FMT schreiben.

-1

QUALIFIZIERTE Vorgehensweise ist besser, um strukturelle Konflikte zu vermeiden und Ressourcen aus unnötigen Datenstrukturdeklarationen zu sparen.