View Full Version : Feldinhalt ermitteln
Hallo ins Forum.
Mein Problem ist folgendes:
Ich habe in einem ILERPG-Pgm zwei Sätze von identischem Satzaufbau im Zugriff, ide ich Feldweise miteinander vergleichen möchte.
Das die Anzahl der Felder groß ist und ich für eventuelle Dateierweiterungen gewappnet sein möchte, möchte ich den Feldabgleich dynamisch machen.
Gibt es hierzu eine Möglichkeit?
Bisher habe ich versucht über ein FFD-File die Feldnamen zu lesen. Aber dann habe ich nur Variablen mit den jeweiligen Feldnamen für die beiden Dateien als Inhalt. Vergleichen will ich aber den Inhalt der Felder, die durch diese Variablen definiert sind.
Ich hoffe ich habe mich klar genug ausgedrückt ;-)
LG Holger
tfroehlich
26-07-06, 10:40
Hallo,
ich bin überhaupt nicht fit im ILE-RPG.
Aber könnte man das Problem nicht mit zwei
externen Datenstrukturen erledigen.
Daten der 1 Datei in Datenstruktur 1.
Daten der 2 Datei in Datenstruktur 2.
Vergleich der Datenstrukturen.
Vielleicht hilft dieser Gedanke.
Gruss Thomas
Hallo Holger,
Du könntest 2 Variablen deklarieren mit *like wie die Formatnamen
D dsDatei1 E DS extname(Datei1)
D a$Datei1 E DS extname(Datei1) prefix(a$)
D dsDatei2 E DS extname(Datei2)
D b$Datei2 E DS extname(Datei2) prefix(b$)
...
C MOVE dsDatei1 a$Datei1
C MOVE dsDatei2 b$Datei2
C a$Datei1 IFNE b$Datei2
...
So in der Art.
Ich weiß allerdings nicht, ob es hier eine Größenbeschränkung gibt, so dass z.B. ab 2000 Zeichen es nicht mehr funktioniert.
Gruß,
Christian
benedikt.gerlich
26-07-06, 11:30
Hallo,
@cbe: Damit würde ja der gesamte Record und nicht nur die Felder verglichen werden.
Das mit der FFD Datei (API Call ginge auch) ist schon der richtige Weg. In der FFD-Datei steht die Feldpositionen drin sowie die Länge usw.
FFD-Datei Satz für Satz lesen und dann einfach die Dateirecords über die Position und Länge miteinander vergleichen. So werden dann praktisch nur die Felder geprüft.
Tschüß
Benedikt
Kleiner Lösungsansatz von mir:
per QCMDEXC
DSPFFD *OUTFILE QTEMP/FFD
FFD im Prg mit USROPn definieren
CALL QCMDEDXC
FFD öffnen und lesen
Die beiden Dateien in DS schieben (wie ist egal, entweder wie oben beschrieben oder MOVEL SATZFORMAT DSPUFFER)
IF (%SST(DSPUFF1:WHIBO:
WHFLDB) <> %SST(DSPUFF2:WHIBO:
WHFLDB)
anstelle von WHFLDB musst du WHFLBD nehmen wenn das feld 'P' 'S' 'B' ist (Feldart)
Wenn es ungleich ist hast du auch direkt den Feldnamen.
So ungefähr muss es gehen ;)
stimmt natürlich, dass ich alle Felder auf einmal vergleiche - ich bin gar nicht auf den Gedanken gekommen, dass Holger die Unterschiede _je Feld_ brauchen könnte.
RobertMack
26-07-06, 12:42
Hallo Christian,
ich auch nicht, er hat ja von von identischem Satzaufbau gesprochen ;-)
Gruß,
Robert
Vielen Dank! :)
So funktioniert es und habe, was ich brauche: die Unterschiede auf Feldebene.
Gruß
Holger