Anmelden

View Full Version : Probleme mit lookup und Tabellen



harkne
06-09-17, 12:27
Hallo zusammen,

ich habe eine ganz komische Situation hier.



d Tab1 s 11 dim(30) ctdata perrcd(1)
d Tab2 s 10 dim(30) alt(Tab1)

Bei der Anweisung


c A_FirmaLoa lookup Tab1 Tab2 80


geht zwar die 80 an, aber Tab2 wird nicht gefüllt. Aber komischerweise nicht bei allen, sondern bisher nur bei einem bestimmten Eintrag.

Ein Schleifendurchgang vorher hat er den Eintrag "4010201 304" gefunden und korrekt "311 02500" in TAB2 stehen. Beim nächsten Schleifendurchgang hat er den Eintrag "4010201 317" auch gefunden, aber TAB2 ist blanks obwohl "314 05000" drin stehen müsste.

Ich habe mir die entsprechenden Anweisungen aus der Quelle kopiert und ein eigenständiges Programm daraus gemacht. Da hat er dann keine Probleme.

Inzwischen habe ich schon alles mögliche probiert und habe letztendlich den ersten Tabelleneintrag "Konstant" gesucht und anschließend erst den variablen Tabelleneintrag. Jetzt ist auf einmal auch TAB2 gefüllt. Ich kapier es nicht. Kann mir dafür jemand einen Grund nennen ?

Die Suche bei der es jetzt funktioniert sieht wie folgt aus:


c '4010201 218'lookup Tab1 Tab2 80
c A_FirmaLoa lookup Tab1 Tab2 80


Die Tabelleneinträge sehen wie folgt aus


4010201 218 402
4010201 605 410
4010201 600 415
4010201 612 419
4010201 283 538
4010201 034 407
4010201 402 731
4010201 300 201
4010201 302 310 02500
4010201 304 311 02500
4010201 317 314 05000
4010201 337 319 10000
4010201 328 214
4010201 404 424
4010201 627 421
4010202 218 402
4010202 605 410
4010202 600 415
4010202 612 419
4010202 283 537
4010202 034 407
4010202 402 731
4010202 300 201
4010202 302 310 02500
4010202 304 311 02500
4010202 317 314 05000
4010202 337 319 10000
4010202 328 214
4010202 404 424
4010202 627 421

Robi
06-09-17, 13:20
schau dir den Dateiwert in Hex an. Da könnte mist drin stehen

harkne
06-09-17, 14:31
Yupp hab ich. Wie aber bereits oben beschrieben. Die Bezugszahl für gefunden geht an. Nur der Wert in TAB2 ist blanks

Pikachu
07-09-17, 13:23
Dann hast du den Fehler wohl nicht mitkopiert. ;-)


Ich habe mir die entsprechenden Anweisungen aus der Quelle kopiert und ein eigenständiges Programm daraus gemacht. Da hat er dann keine Probleme.

harkne
07-09-17, 14:25
Wir haben das Problem jetzt IBM gemeldet. Er kann das mit den vorhandenen Daten nachvollziehen, also er bekommt zum Glück auch den Fehler hat aber auch noch keine Lösung an was es liegt.

Es muss auch eine komische Konstellation sein, die den Fehler verursacht, denn wie gesagt, die Bezugszahl des LOOKUP zeigt ja an das er den String in TAB1 gefunden hat nur bleibt der Wert in TAB2 leer obwohl ein Wert drin steht.

harkne
11-09-17, 08:49
Ich hätte vielleicht 3 Zeilen mehr Code hier posten sollen, dann wäre die Watschn schon früh genug gekommen.

Im Programm kommt nach



c A_FirmaLoa lookup Tab1 Tab2 80


noch die Abfrage ob Tab1 gefunden wurde und wenn nicht gefunden wurde "move *blanks" nach TAB2. Wie wir von IBM erfahren haben wird dann aber *blanks in das letzte gefundende TAB2 Element gestellt und somit, wenn wieder nach dem gleichen TAB1 gesucht wird wie zuvor, steht dann halt blanks drin. Deshalb hat er auch gefunden aber *blanks als Ergebnis geliefert.

Ich dachte aber nicht dass der Compiler überhaupt zulässt dass ich Tabellenelemente die unten konstant angegeben wurden, geändert werden können.

Naja ... wieder etwas schlauer.

Entschuldigung dass ich Euch mit fehlenden Anweisungen in die Irre geführt habe.

Einen schönen Wochenstart an alle.

Viele Grüße Harkne

Fuerchau
11-09-17, 08:54
Du kannst keine konstante Tabelle definieren.
Was du da definierst ist eine Tabelle, die zum Startzeitpunkt deines Programmes in die definierte Tabelle geladen wird, dies entspricht einer INZ-Anweisung auf Feldebene.
Nur wenn man eine Variable mit INZ initialisiert verhindert dies ja nicht das Überschreiben, das wäre ja doch ziemlich fatal.

harkne
11-09-17, 09:10
OK. Ich dachte CTDATA heißt constant data ... habe gerade nachgeschaut. Heißt dann doch wohl COMPILE TIME data.