-
%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 : *NoDebugIO) Datedit(*DMY) DatFmt(*ISO) Indent('| ') H DftActGrp(*No) actgrp(*caller) expropts(*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(16) ascend 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(en) 2402235 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
-
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 08:38.
Grund: Anmerkung
kf
-
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.
-
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
-
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)
Similar Threads
-
By JEsser in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 17-11-14, 18:28
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks