-
Hallo Birgitta,
vielen Dank für die schnelle Antwort.
Wo kommt denn der Bezug zu dem Externen Feld in deinem Beispiel her?
Das verstehe ich nicht, ich muss doch irgendwo sagen, dass das Externe Feld "KW01" jetzt im Array KW(01) stehen soll.
Was früher über diese I-Bestimmung gemacht wurde
I-Bestimmung, dann Externer Feldname = KW01 und Feldname = KW(01)
IDateiS1
I KW01 KW(01)
I KW02 KW(02)
I KW03 KW(03)
Viele Grüße
Peter
-
Die Lösung für die Kranken würde Dieter jetzt sagen:
Du könntest einen Array definieren und diesen via Pointer auf den Record legen.
kf
-
Stimmt, Pointer sind die Lösung:
dcl-ds DSFILE extname('FILE') qualified;
end-ds;
dcl-s PointerKW pointer inz(%addr(DSFILE.KW01));
dcl-s KW based(PointerKW) dim(nn);
Bei Birgittas Vorschlag entnimmst du die Startposition aus DSPFFD.
Das ist nur bei Dateiänderungen halt nicht dynamsich.
Aber wer ändert schon bestehende Dateien;-).
Das Problem bei externen DS'n ist ja, dass diese nicht erweiterbar sind, im Gegensatz zu den alten DS'n, an die ich einfach anhägen kann.
Übrigenes arbeite ich auch bei SQL gerne mit Pointern, da SQL immer noch nur einstufige DS'n unterstützt. Mit Templates und Pointern kann man das sehr schön vereinfachen ohne ständig irgendwas zu moven.
-
Den Umweg über die Datenstruktur könntest Du dir auch noch sparen und direkt auf dem Feld im Record aufsetzen.
Also, gemäss Baldur's Vorgabe:
dcl-s PointerKW pointer inz(%addr(KW01));
dcl-s KW like(KW01) based(PointerKW) dim(53);
Cool oder?
kf
-
Bei euren Pointer-Lösungen vergeßt Ihr nur eines:
Die 53 Felder müssen in der Tabelle hintereinander weg stehen ansonsten klappt das nicht!
... und bei Datei-Änderungen (mit und ohne Compile) würde ich nicht die Hand ins Feuer legen.
Meine Lösung war einfach und simpel, da die Datenstruktur nicht qualifiziert ist, brauchen weder die Unterfelder definiert werden (Auflisten reicht), noch spielt die Reihenfolge eine Rolle!
Eine zusätzliche externe Datenstruktur, in die der Satz gelesen wird ist nicht erforderlich!
Es ist so wie es schon immer war: Gleicher Name, Gleicher Wert und ein Hin- und Her-Schieben ist nicht notwendig. ... und die Feldgruppe überlagert dann die Datei-/Datenstruktur-Unter-Felder.
... und bei Datei-Änderung muss lediglich kompiliert werden.
Ich frage mich, wo ich in meinem Beispiel irgendwo eine Start-Position angegeben habe?!
aber wer allerdings gerne mit Pointern und (unnötigen) externen Datenstrukturen herumhantiert...
-
Hall zusammen,
und vielen Dank für eure Antworten.
Da in der Anwendung bisher auch nicht mit Pointern gearbeitet wird, würde ich die Lösung von Birgitta bevorzugen.
Hierbei stoße ich nur auf ein Problem.
Das funktioniert.
DCL-DS DSKW;
KW01;
KW02;
KW03;
...
KW53;
KW Like(KW01) Dim(53) Pos(1);
End-Ds;
Aber sobald ich es um eine Zeile erweitere also..
DCL-DS DSKW;
KW01;
KW02;
KW03;
...
KW53;
KW Like(KW01) Dim(53) Pos(1);
KW LIKE(KW02) DIM(53) POS(2);
End-Ds;
Sagt mir der Compiler, dass KW bereits definiert ist.
Da habe ich jetzt wohl gerade ein Brett vor dem Kopf...
Wenn sich das noch lösen lässt wäre das klasse.
Vielen Dank
-
Streich den zweiten KW Pos(2), einer genügt.
Vielleicht noch etwas zur Erklärung:
Diese Lösung ist genau so wie mit den Pointern, nur dass Du alles in eine Datenstruktur einliest und dann mit einem Array überlagerst. In meinen Augen ein bisschen outdated, aber funktioniert auch.
@Birgitta: Barbra würde auch die Pointerlösung empfehlen - sag ich mal jetzt so.
kf
-
 Zitat von camouflage
@Birgitta: Barbra würde auch die Pointerlösung empfehlen - sag ich mal jetzt so.
Dann frag sie doch!
Nur warum soll ich mir die Arbeit mit den Pointern selber machen, wenn RPG das für mich erledigt!
Das ganze Pointergefuddell ist viel fehleranfälliger.
-
 Zitat von B.Hauser
Das ganze Pointergefuddell ist viel fehleranfälliger.
Kannst Du das belegen?
Ich kenne Pointers seit meinen Assembler-Zeiten, sogar auf ganze Overlays.
Wenn ich nach Zeilen bezahlt und die Source aufgebläht werden soll, dann nehme ich natürlich deine Lösung, doch die vorgegebene Aufgabe lässt sich mit zwei Zeilen RPG-Code erledigen! Ausserdem brauche nicht noch eine unnütze Datenstruktur, nur um an ein Array-Overlay zu kommen.
Natürlich ist eine Pointerlösung nicht in jedem Fall das Allerheilmittel, hier aber schon.
Allenfalls könnte man ja sonst auch noch ChatGPT fragen ...
kf
-
Birgittas Lösung funktioniert nur, wenn man nicht mit einer qualified DS für Input arbeitet.
Denn weiterhin gilt immer noch, dass eine Variable nur 1x in irgend einer DS verwendet werden kann.
Wenn man aber mit qualified DS arbeitet, muss man tatsächlich etwas mehr machen, wenn man:
a) sich nicht auf eine bündige Reihenfolge von Felder verlassen kann
b) und damit Birgittas Lösung verwenden muss.
dcl-ds DSFile extname('File') qualified;
end-ds;
dcl-ds KWDS qualified;
kw01 like(DSFile.KW01);
:
:
kwnn like(DSFile.KWnn) dim(nn);
end-ds;
eval-corr KWDS = DSFILE;
-
Damit hast Du doch schon alles definiert was Du brauchst:
Code:
DCL-DS DSKW;
KW01;
KW02;
KW03;
...
KW53;
KW Like(KW01) Dim(53) Pos(1);
End-Ds;
Die Feldgruppe KW hat bereits 53 Elemente ... und die Feldgruppe überlagert die ganze Datenstruktur, da sie auf der 1. Stelle (Pos(1)) beginnt, also alle einzelne Einträge (KW01 - KW053).
Da die Feldgruppe mit LIKE(KW01) definiert ist also wie KW01 (und ich gehe davon aus dass alle anderen 52 genauso definiert sind - ansonsten hast Du ein anderes Problem!), sollte alles ordentlich überlagert sein.
Damit ist also in KW(1) das erste Element und KW(53) das 53. Element und in KW(27) das 27.!
Du Kannst direkt KW(1), KW(23) ... oder KW(x) (vorausgesetzt x hat einen Wert zwischen 1 und 53) ansprechen.
-
Danke Birgitta !
Da hatte ich wohl ein (dickes) Brett vorm Kopf.
Es klappt.
Vielen Dank an alle für die schnellen Rückmeldung !
Similar Threads
-
By Chris.jan in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-07-18, 11:13
-
By itec01 in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 21-06-17, 21:39
-
By Duriel in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 15-07-15, 08:56
-
By harkne in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 19-11-13, 10:02
-
By HoScHiE in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 10-05-02, 10:03
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