Anmelden

View Full Version : Feldinhalt ermitteln



Holger24
26-07-06, 10:09
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

cbe
26-07-06, 10:40
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

ExAzubi
26-07-06, 12:03
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 ;)

cbe
26-07-06, 12:07
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

Holger24
27-07-06, 09:05
Vielen Dank! :)

So funktioniert es und habe, was ich brauche: die Unterschiede auf Feldebene.

Gruß
Holger