-
Variable Length Fields
Hallo!
Ich habe wieder einmal ein Problem. Ich lese die Datei QUSRSYS/QAOKL12A für den Familien-/Vornamen eines Benutzers. Mein Problem ist nun, dass ich die Variable-Length-Fields nicht korrekt per Modul in ein Programm übermitteln kann.
Im aufrufenden Programm wird das Module wie folgt aufgerufen:
Dmd_emailu pr extproc('MD_EMAILU')
D puser 10a const
D pemailadr 300a varying
D pFName 42a varying
D pVName 22a varying
D prtnsts 1a
D*
D puser s 10a
D pemailadr s 300a varying
D pFName s 42a varying
D pVName s 22a varying
Das Module für die Namensermittlung empfängt folgende Parameter:
Dinput pr extproc('MD_EMAILU')
D pusernm 10a const
D pemailadr 300a varying
D pFName 42a varying
D pVName 22a varying
D prtnsts 1a
Mit pFName = wok9srcl wird immer die komplette Feldlänge in pFName eingetragen (42Byte). Mit pFName = %trimr(wok9srcl) wird immer das Längenfeld mitgespeichert und somit die Länge von pFName um 2 Byte zu lang.
Außerdem dachte ich immer, dass wenn ein Variable-Length-Field in ein Zeichenfeld übertragen wird dies immer ohne der Längenangaben erfolgt?!? Text = W0K9SRCL ergibt aber immer eine 1:1 Kopie des Inhaltes von WOK9SRCL.
Beide Module habe mit CVTOPT(*VARCHAR) umgewandelt.
Wie bekomme ich jetzt den Inhalt der Variable-Length-Fields einfach in ein normales Zeichenfeld?
Danke für Eure Antworten im voraus
Hermann
-
Warum?
"Beide Module habe mit CVTOPT(*VARCHAR) umgewandelt."
Und warum?
Was erhoffst Du Dir davon?
-
Ein Varying-Feld beinhaltet immer 2-byte-Längeninformation zusätzlich!
"MyVarField 30 varying" ist also tatsächlich 32 Bytes lang, kann aber nur max. 30 Zeichen aufnehmen.
Die Anpassungen regelt das Programm automatisch:
D MyField 30
D MyVarField 30 varying
MyField = MyVarField; // übertragen und ggf. mit Leerzeichen auffüllen
MyVarField = MyField; // Zielfeld ist immer mit 30 zeichen gefüllt
MyVarField = %trimr(myField); // Blanks entfernen und übertragen, die Länge ist nun die Anzahl der Zeichen
Nun kommt es auf dein aufzurufendes Programm an, ob es tatsächlich mit Varying-Feldern arbeitet!
Prüfe also mal die Definitionen.
Einen Fehler zur Laufzeit (MCH....) kann es im empfangenden Programm bei varying geben, wenn das Empfangsfeld zu klein definiert ist.
D Empfang 100 varying
D Sender 200 varying
Bis 100 Zeichen funktioniert das, ab 101 nicht mehr.
-
Na ja, wieso nicht so:
Text = %subst(W0K9SRCL:1:%len(W0K9SRCL)) ?
ps. Baldur hat natürlich, wie fast immer, recht ;-)
kf
-
Hallo und danke an Alle!
Die Lösung war natürlich die einfachste. Ich habe beide Module ohne CVTOPT(*VARCHAR) compiliert und alles ist gelaufen wie es sollte.
Die Felder aus QAOKL12A wurden beim DEBUG ohne Längenangaben angezeigt und ein pFNAME = WOK9SRCL funktioniert auch ohne dass die Längenangabe in PFName steht!!!
Danke für eure Hilfe und ein schönes Wochenende
Hermann
-
Wie war das noch mal mit dem Lesen?
*VARCHAR
Gibt an, daß Datenarten für Zeichenfelder variabler
Länge als Zeichenfelder fester Länge deklariert werden sollen.
Lässt man diese Option weg, werden die Felder eben wieder als varying definiert, so wie es sein sollte.
Eigentlich stammt diese Option aus OPM-RPG, als varying nicht unterstützt wurde und man sich da mit etwas Aufwand selber helfen musste.
Wird nun ein OPM per CVTRPGSRC in ILERPG überführt, wird die Option natürlich benötigt, damit die Programme ohne Änderung weiter funktionieren.
Für neue ILE's braucht man keine der CVTOPT's mehr, da alles native von ILERPG unterstützt wird.
Similar Threads
-
By Robi in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 17-01-13, 15:31
-
By stoerfang in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 28-11-06, 14:32
-
By Xanas in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 28-08-06, 12:21
-
By TARASIK in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-08-06, 10:09
-
By cheffe1008 in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 16-05-06, 07:45
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