PDA

View Full Version : %lookup



horni
04-10-07, 11:21
Hallo zusammen,

ich habe da ein Problemchen mit einer Tabelle und hier speziell mit dem %lookup.

Ich habe eine Tabelle mit einem Wert und einer Schlüsselnummer:

D Emp_Teile 50 Dim(50) DESCEND
D Emp_Wert 9 2 OVERLAY(Emp_Teile:1)
D Emp_Lfnr 9 OVERLAY(Emp_Teile:10)

Habe ich eine Nummer abgearbeitet und den Wert ermittelt sehe ich mittels eines %lookup

#PosArray = %Lookup($Lieferant:Emp_Lfnr:1);

in der Tabelle nach. Bei #PosArray = 0 - schreiben, sonst den Wert addieren.

Soweit so gut, funktioniert bis zu einen gewissen Punkt prächtig. Dann aber findet er kurzfristig vorhandene Schlüssel nicht mehr, was natürlich zur folge hat, dass Einträge doppelt und dreifach vorhanden sind. Da ich am Ende sortiere und nur den höchsten Wert benötige ist das natürlich fatal :mad:
Seltsamer Weise addiert er dann auf einen der doppelt eingetragenen Werte wieder richtig weiter ?!

Ich suche mir hier einen Wolf, kann aber nicht wirklich einen Fehler in der Programmlogik feststellen.

Hat vielleicht irgend jemand eine Idee woran das liegen könnte, oder nach was ich noch suchen sollte ?

Schon mal herzlichen Dank im Vorraus.
Horni

Fuerchau
04-10-07, 13:07
Das Problem ist die Sortierfolge.
Durch die Angabe DESCEND wird das Halbierungsverfahren bei der Suche verwendet.
Sortiert ist das Ganze allerdings nach dem Wert !
Stelle die Felder einfach um, also zuerst die Emp_Lfnr, dann klappts auch mit dem Sort.

horni
04-10-07, 13:20
Hab ich jetzt probiert, aber der Effekt ist der gleiche und nebenbei hab ich jetzt die Sorierung nach dem Schlüssel (Emp_Lfnr) und nicht mehr nach dem Wert.
Ich habe vorhin mal die Sortierung ganz rausgenommen und am Ende nur den SortA drüberlaufen lassen. Doppelte Sätze hatte ich keine mehr, dafür war der Wert den ich benötige am Ende der Tabelle. Gut, damit könnte ich leben, aber gefallen tut´s mit nicht.

Fuerchau
04-10-07, 14:38
Die Sortierung MUSS nach jedem Hinzufügen der Tabelle erfolgen, damit der neue Wert auch einsortiert wird !

Das Problem ist, dass der Compiler bei einer sortierten Tabelle ERWARTET dass sie sortiert ist.
Ist die Tabelle unsortiert (nach dem Hinzufügen eines Elements), kommt es zu unvorhergesehenen Ergebnissen.

Lässt du die Sortierfolge weg, verwendet LOOKUP natürlich die sequentielle Suche und dann gibts eben nix doppelt.

horni
04-10-07, 14:55
Erstmal herzlichen Dank für die Hilfe,

Da es sich eh um ein Progrämmchen handelt was wahrscheinlich nur einmal läuft und dann im ewigen Speicher verrotten wird, werde ich mich für die weniger elegante Variante von vorhin entscheiden.

Nochmals Danke für die Informationen
Gruss
Horni