[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2007
    Beiträge
    371

    suche in Datenstruktur Array

    Hallo zusammen ,


    ich arbeite unter V6R1M0.
    Ausganngssitiation ist folgende:

    ich habe z.b. ein DS mit 3 feldern

    datenstruktur DS Qualified
    arr dim(100)
    feld1 10A
    feld2 20A
    feld3 10 A


    diese ist mit z.b. folgenden werten gefüllt
    Feld1 Feld2 feld3
    hans , busch , strasse
    joachim, nachname , ort
    hans , busch , strasse
    manfred, blabla , weg


    nun bekomme ich 3 suchargumente hans , busch, Strasse.

    jetzt möchte ich in der datenstruktur überprüfen wo im
    feld 1 hans steht und
    feld 2 busch steht und
    feld 3 strasse steht

    mit %lookup bekomme ich das ja nicht hin weil ich immer nur 1 such argument übergeben kann und nicht die ganze datenstruktur vergleichen kann.
    weiss jemand evtl ne bessere lösung als mit schleifen und ifs usw zu arbeiten ?

    grüsse

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Warum machst Du keinen %Lookup auf ARR?
    Da hast Du doch alle Felder in Reihe und kannst selektieren.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Nov 2007
    Beiträge
    371
    wie meinst du das ?

    ich kann doch nur schreiben
    e1 = %lookup (hans : datentruktur.feld1 )
    if e1 <> zeros
    e2 = %lookup (busch : datentruktur.feld2 )
    if e2 <> *zeros and e2 = e1
    e3 = %lookup (strasse : datentruktur.feld3 )
    usw usw



    ich würde aber gerne alle drei felder gleichzeitig suchen .

    viele grüsse

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    %lookup ist nicht schneller als eine eigene Schleife, nur hlat komfortabler.
    Sortierte Tabellen gehen schneller da hier Binärsuche (hoffentlich) verwendet wird.

    Solange du nach dem gesamten Begriff suchst, kannst du natürlich auf "ARR" suchen:
    %lookup(Suchfeld:Arr)
    Das Suchfeld muss natürlich entsprechend dem ARR definiert und belegt werden.

    Wenn du nur Feld1 und Feld3 suchen willst, kommst du um eine Schleife nicht herum.
    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
    Nov 2007
    Beiträge
    371
    hallo furechau ,
    hab mich evtl falsch ausgedruckt.

    ich würde gerne so suchen lookup( hans , busch, strasse : feld1 : feld2 : feld 3 )
    das geht natürlich nicht . habs jetzt nur mal so zum besseren verständnis geschrieben

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Da du ja weißt, dass das nicht geht, verstehe ich dein Problem nicht:

    d Suchfeld ds
    d F1 10
    d f2 20
    d f3 10

    f1 = hans; f2 = busch; f3 = Strasse;
    lookup(Suchfeld:Arr);
    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

  7. #7
    Registriert seit
    Nov 2007
    Beiträge
    371
    wollte nur wissen obs da evtl nen trick 17 gibt

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    So wie Du die Datenstruktur definiert hast, kannst Du ein 40A Vergleichsfeld füllen und dann mit diesem den %LOOKUP auf das Array ARR machen:
    Code:
    D DSVergl           DS                   Qualified
    D    Feld1                        10A     
    D    Feld2                        20A
    D    Feld3                        10A  
     /Free
        DSVergl.Feld1 = 'Hans';
        DSVergl.Feld2 = 'Busch';
        DSVergl.Feld3 = 'Strasse';
    
        Pos = %LookUp(DSVergl: Datenstruktur.Arr);
    Sofern POS = 3 wäre, würde in Datenstruktur.Feld1(3) Hans stehen in Datenstruktur.Feld2(3) Busch und in Datenstruktur.Feld3(3) Strasse.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Der Trick 17 ist: schreibe (vernünftigerweise) dafür eine Funktion:

    d Suchen pr 5i 0
    d F1 10 const
    d F2 20 const
    d F3 10 const

    Suchen(Hans:Busch:Strasse);

    p suchen b
    d Suchen pi 5i 0
    d F1 10 const
    d F2 20 const
    d F3 10 const

    return %lookup(F1 + F2 + F3:Arr);
    p suchen e

    Du kannst ja %lookup(hans + Busch + Strasse:Arr) direkt verwenden, allerdings sind die Begriffe dann genau mit Blanks aufzufüllen.
    Die Funktion sorgt aber dafür, dass die Feldlängen korrekt sind und somit der %lookup immer mit dem Begriff korrekt sucht.
    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

Similar Threads

  1. Suche AS/400
    By AK1 in forum NEWSboard Server & Hardware Markt
    Antworten: 11
    Letzter Beitrag: 08-02-14, 18:24
  2. STRDBG und Datenstruktur
    By XMan in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 08-01-14, 18:51
  3. Array mit Sql befüllen
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-12-13, 14:15
  4. Suche kleine AS/400
    By Charly_t in forum NEWSboard Server & Hardware Markt
    Antworten: 1
    Letzter Beitrag: 04-01-02, 13:34
  5. Suche 10 x 6813 ( 8,58 GB )
    By benny in forum NEWSboard Server & Hardware Markt
    Antworten: 4
    Letzter Beitrag: 06-02-01, 14:34

Berechtigungen

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