[NEWSboard IBMi Forum]

Thema: %lookup

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    309

    %lookup

    Datenbank: ETECPPF
    PHP-Code:
    TPKDN    TPKW01  TPKW02  TPKW03  TPKW04  TPKW05  TPKW06  TPKW07  TPKW08  TPKW09  TPKW10  TPKW11  TPKW12  TPKW13  TPKW14  TPKW15  TPKW16                                                                                                       
    2402235  AAAAAA  BBBBBB  CCCCCC  DDDDDD  EEEEEE  FFFFFF  GGGGGG  HHHHHH 
    entspr. Pgm.
    PHP-Code:
    H Option(*SrcStmt : *NoDebugIODatedit(*DMYDatFmt(*ISOIndent('| '
    H DftActGrp(*Noactgrp(*callerexpropts(*resdecpos)                   

    FETecPPFIF   E           K Disk    UsrOpn Rename(ETF1:ETF1s)

     *
    Konstanten Variablen            
    D Pos9            s              2  0 
    D PosX            s             10i 0

    D                 DS                                
    D  TPKw                   1    240    dim
    (16ascend
    D  TPKw01                 1     15                  
    D  TPKw02                16     30                  
    D  TPKw03                31     45                  
    D  TPKw04                46     60                  
    D  TPKw05                61     75                  
    D  TPKw06                76     90                  
    D  TPKw07                91    105                  
    D  TPKw08               106    120                  
    D  TPKw09               121    135                  
    D  TPKw10               136    150 
    D  TPKw11               151    165   
    D  TPKw12               166    180   
    D  TPKw13               181    195   
    D  TPKw14               196    210   
    D  TPKw15               211    225   
    D  TPKw16               226    240   

    /free                                      
                                               
     Open ETecPPF
    ;                          
                                               
     
    TPKw  = *blank;                           
                                               
     
    Chain(en2402235 ETecPPF;             
     If %
    found(ETecPPF);                    
                                               
       
    Pos9 = %lookup(*blank:TPKw);            
       
    Pos9 = %lookup('               ':TPKw); 

       
    Pos9 = %lookup(*blank:TPKw:1:16);            
       
    Pos9 = %lookup('               ':TPKw:1:16); 
                                                   
       
    PosX = %lookup(*blank:TPKw);                 
       
    PosX = %lookup('               ':TPKw);      
                                                   
       
    PosX = %lookup(*blank:TPKw:1:16);            
       
    PosX = %lookup('               ':TPKw:1:16); 
                                                   
    EndIf;                                         
                                                   
    Close ETecPPF;                              
                                                   
    *
    InLR = *on;

    /
    end-free 
    mit diesem Programm möchte ich das erste Element der DS (TPKW) finden, welches mit *blank gefüllt ist.

    mein Problem ist hier, dass, falls die Tabelle (wie im Beispiel) mit mehr als 8 (AAAAAA - HHHHHH) gefüllt ist,
    ich immer in den Variablen Pos9 bzw. PosX eine "0" zurück bekomme und nicht "9".

    sind in der Tabelle nur max. sieben Felder gefüllt, dann bekomm ich in den Variablen Pos9 bzw. PosX den Wert "08" bzw "8"

    => kann mir jemand sagen, wo hier mein Problem (Fehler) liegt?


    thx

  2. #2
    Registriert seit
    Jan 2007
    Beiträge
    904
    Ich denke, dass du TPKw 16 x 240 Stellen definiert hast.
    Vielleicht:
    D TPKW 15 DIM(16) OVERLAY TPKW01

    Anmerkung:
    Wobei ich den ascend auf dem Array schon noch heiss finde. Hab das so noch nie angewendet, funktioniert das überhaupt?
    Last edited by camouflage; 13-10-15 at 09:38. Grund: Anmerkung
    kf

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    In ILE sieht die Definitionswelt etwas anders aus.
    Der Compiler lehnt Redefinitionen ab, die länger sind als der Ursprung.
    Also

    D ds
    d TPKW 15 dim(16)
    d TPKW01 1 15
    d TPKW02 16 30
    d :

    Wichtig ist das Weglassen von ASCEND!
    Damit erzwingst du, dass die Tabelle aufsteigend sortiert sein muss!
    Ansonsten wird nämlich nichts gefunden, da die Runtime nach dem Binärhalbierungsverfahren 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

  4. #4
    Registriert seit
    Nov 2009
    Beiträge
    208
    Meiner Meinung nach, sollten sie statt der absoluten Angaben mit *Next arbeiten

    D DS
    D TPKW 15 DIM(16)
    D TPKW01 like(TPKW) overlay(TPKW:1)
    D TPKW02 like(TPKW) overlay(TPKW:*next)
    ...

    Dietlinde Beck

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Unabhängig davon, die absoluten Angaben können auch aus einer externen DS kommen.
    Was auch ganz prima geht:

    D MyFile DS extname(MyFile)

    D MyTabPtr s * inz(%addr(xxfld01))
    D XXFLD s like(yyfld01) dim(nn) based(MyTabPtr)

    Das klappt dann sogar mit mehreren Feldern.
    Wie oft findet man Strukturen wie:
    d FLDA01 ...
    d FLDB01 ...
    d FLDA02 ...
    d FLDB02 ...

    Dann nehme ich halt folgende DS

    D MyDS ds dim(nn) based(MyTabPtr)
    d FLDA like(FLDA01)
    d FLDB like(FLDB01)
    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. InterFormNG - Jetzt mit Datenbankabfrage (Database-lookup-feature)
    By JEsser in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 17-11-14, 19:28

Berechtigungen

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