[NEWSboard IBMi Forum]

Thema: %lookup

  1. #1
    Registriert seit
    Jun 2002
    Beiträge
    25

    %lookup

    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
    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2002
    Beiträge
    25
    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.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jun 2002
    Beiträge
    25
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •