PDA

View Full Version : Programmierung



Helwo
12-09-02, 14:58
Hallo an alle,
hat jemand eine Lösung für ein anscheinend einfaches, aber vertracktes Problem?
Ich habe in einer Datei
KDNR ANR GEBO,
aufsteigend sortiert Nach KDNR und ANR.
Wenn KDNR Satz 2= KDNR Satz1, dann soll ANR Satz2 Nach GEBO Satz1 gespeichter werden.
Wenn KDNR Satz 3=KDNR Satz2, dann ANR Satz3 nach GEBO Satz1 rechts neben die 1.Position und ANR Satz3 nach GEBO Satz2 u.s.w.
Ist das überhaupt auf der AS400 programmierbar oder ist das besser auf dem PC machbar? Obwohl, da fällt mir eigentlich
auch keine Lösung ein -außer der "per Hand"-Methode.
Vielen Dank für einen Tipp.
Gruß Helwo

malzusrex
12-09-02, 16:00
kannst du mir noch was über die feld größen erzählen ????

B.Hauser
13-09-02, 08:02
Hallo Helwo,

was mich an Deinem Problem am meisten verwirrt ist "Rechts neben die 1. Position"

Sollen die ANR's in unterschiedliche Felder, oder direkt in das Feld GEBO geschrieben.

In beiden Fällen muss klar sein, dass sowohl die Anzahl der Felder als auch die Feldlänge nicht beliebig per Programm erweitert werden kann. (evt. Datenverlust!)

Nur noch mal zum Verständnis.
Soll das Ganze wie folgt aussehen:
Ursprungs-Datei:
KDNR ANR GEBO
10 4711
10 4712
10 4713
11 4810
11 4812
11 4819

Nach Update:
KDNR ANR GEBO
10 4711 4712 4713
10 4712 4713
10 4713
11 4810 4812 4819
11 4812 4819
11 4819

Realisieren könnte man dies, indem man zwei Lesescheifen verwendet.
1. Leseschleife für den Update
2. Leseschleife zum Ermitteln des Strings für GEBO

z.B.
H DEBUG DECEDIT('0,') DATEDIT(*DMY.)
FFileUP UF E K DISK
FFileIP IF E K DISK rename(FileF: FileIF)

D $$GEBO S Like(GEBO)
D K$KDNR S like(KDNR)
D K$ANR S like(ANR)

C do *Hival
C read (E) FILEF
C if %EOF
C leave
C endif
c exsr XGEBO
C eval GEBO = $$GEBO
C update (E)FILEF
C enddo

C eval *InLR = *on
************************************************** ********************************************
C XGEBO BegSR

C clear $$GEBO

C KeyL Klist
C Kfld K$KDNR
C Kfld K$ANR

C eval K$KDNR = KDNR
C eval K$ANR = ANR

C KeyL setgt FILEIF

C Do *HiVal
C K$KDNR reade FILEIF
C if %EOF
C leave
C endif
C eval $$GEBO = %TrimR($$GEBO) + ANR
C Enddo

C EndSR

Du benötigst für diese Lösung entweder eine logische Datei mit dem gleichen Schlüssel wie die physische, oder Du überschreibst die physische Datei in einem vorgelagerten CL-Programm.
(Die Überschreibung kann natürlich auch im RPG-Programm erfolgen, dazu müssen die Dateien allerdings explizit geöffnet werden. USROPN in den F-Bestimmungen)

Der Quellcode ist nur beispielhaft und nicht getestet.
Vielleicht hilft Dir das weiter

Birgitta

Helwo
17-09-02, 08:32
Hallo,

bin erst heute wieder in meinem "Inhouse-Büro". Vielen Dank für Eure Antworten.

1. Die Feldgrößen
KDNR = 7 stellig
ANR = 3 "
GEBO = 60 "
GEBO könnte theoretisch zu klein werden

2. Du hast das Problem richtig erkannt.
Danke für den Quellcode, werde das mal
probieren.

Gruß Helwo