Anmelden

View Full Version : Sichern Satzformat



malzusrex
19-08-04, 11:47
Hallöchen *all !

Ich wollte gern einen Satz einer Datei lesen und alle Felder sichern, und unter bestimmten Umständen alle Felder aus der "Sicherung" wieder zurück setzen. Nun habe ich es mit einer DS versucht, nur bekomme in dann das Satzformat da nicht drauf


fDatei1 uf a e k Disk

d DsSave e ds extname(Datei1)
d prefix($)

c Read Datei1F
c
c Eval DsSave = Datei1F


Habe ich überhaupt eine Möglichkeit dan Satz auf diese Weise zu sichern, oder muss ich jedes Feld einzeln sichern (was bei ca. 100 feldern im format etwas viel tipparbeit wären)

Tschau Ronald

Fuerchau
19-08-04, 12:28
Anstelle des Satzformates musst du eine 2. Struktur mit einem Namen und den identischen Feldern definieren:

d DsOrig e ds extname(Datei1)

eval dssave = dsorig

malzusrex
19-08-04, 12:36
Danke, genau das hab ich gesucht. Funktioniert prima!

Gruß Ronald

Zuther
26-03-09, 12:01
Hallo *all
Kann man den Satz auch in RPG-code sichern? Wenn ja, kann mir irgendjemand ein Beispiel-Code geben!

Vielen Dank für Euere Bemühungen!

Fuerchau
26-03-09, 12:36
Das ist ebenso einfach, allerdings gibts dabei keine Hilfen.
Schau nach, wie lang dein Satzformat ist (DSPFD, DSPFFD) und definere einfach zwei DS:

IMYDS E DSFROMFILE
IMYSAVE DS 1 9999

9999 = Länge des Satzformates

Die erste Definition legt die Felder in eine DS (soweit du das nicht schon gemacht hast), die 2. Definition legt eine DS ohne Unterfelder an (gibt nur eine Compilerwarnung).
Eine DS lässt sich wie eine Variable ansprechen:

MOVELMYDS MYSAVE
MOVELMYSAVE MYDS

PS:
Eine DS (ggf. ohne Unterfelder) ist übrigens die einzige Möglichkeit, Variablen > 256 Stellen (max. 9999) zu definieren.

Zuther
26-03-09, 15:23
Hallo Herr Fürchau,

vielen Dank für Ihre schnelle Nachricht! ich habe dies auch sofort ausprobiert. Leider bekomme ich einen Dezimaldatenfehler. Kann es sein dass gepackte Felder nicht verarbeitet werden?
mfg
Zuther Hans

B.Hauser
26-03-09, 16:32
Hallo,

einfacher ist es eine Datenstruktur entweder über das Schlüssel-Wort LIKEREC oder als externe Datenstruktur zu definieren.

Beim Read oder Chain den Datensatz dann direkt in die Datenstruktur ausgeben. (Der eingelesene Satz kann verändert werden und beim Update wird die Datenstruktur ebenfalls im Update-Statement angegeben.)
... Das Ganze funktioniert bereits seit Release V5R2.



FMyFileP IF E K DISK

D DSMyFileP DS LikeRec(MyFileF)
D DSMyFilePx E DS ExtName(MyFileP) Qualified
/Free
Read MyFileF DSMyFileP;
Read MyFileF DSMyFilePx;
Dsply DSMyFileP.Fld1;
Dsply DSMyFilePx.Fld1;
*INLR = *ON;
/End-Free

Fuerchau
26-03-09, 17:37
@Birgitta
Dazu müsste aber das Programm auf ILE erst umgestellt werden.
Es gibt eben noch alte RPG-Programme ;)

@Zuther
Beachte genau was du tust.
Der MOVE überträgt die gesamte DS unabhängig vom Inhalt.

Beim Hin- und Hermoven musst du
a) immer den selben MOVE oder MOVEL nehmen
b) die Größe der DS sollte natürlich stimmen und alles aufnehmen können