-
Länge einer DTAARA ermitteln
Hallo Forum,
ich muss in einem CL die Länge (nicht den Inhalt) eines Datenbereiches ermitteln. DSPDTAARA und *PRINT (dann die Spool auslesen) finde ich nur Suboptimal. Hat jemand eine Idee wie ich da noch rankomme? DSPOBJD *FULL in eine OUTFILE liefert auch nicht die Länge.
Gruss
Ralph
-
hello,
würde mich wundern, wenns dafür nich nen API gibt.
Mal ne Gegenfrage:
Was stört am augenblicklichen Weg (nach *PRINT usw..)?
Und gehts es immer um ne DTAARA in *CHAR oder gibts da auch logische oder welche mit *DEC?
k.
-
Es sind immer *CHAR.
DSPDTAARA mit *PRINT in OUTFILE stört deshalb, da ich ja abprüfen muss in welcher Zeile/Spalte die Länge steht. Bei Mehrsprachigen Systemen ist das Wort "Länge" nachdem ich mich richten würde übersetzt. Somit müsste ich auch nach allen Kombinationen prüfen.
Gruss
Ralph
-
Das geht nur per MI:
RSLVSP: Get Systempointer from Objekt
SETSPPFP: Get Spacepointer from Systempointer
In den Stellen 1-3 steht Attribut und Länge des Datenbereiches.
Allerdings geht das nicht bei DDM-Dataareas.
-
 Zitat von flytokiwi
..Bei Mehrsprachigen Systemen ist das Wort "Länge" nachdem ich mich richten würde übersetzt. Somit müsste ich auch nach allen Kombinationen prüfen.
...
aha...
ist mir nicht ganz klar aber okay.
So eine DTAARA hat ja immer ne maximale Länge. (Bei 5.2 sinds 2000 glaube ich.)
Man könnte alternativ versuchen inner Schleife nacheinander die Stellen von hinten nach vorne auszulesen (resp. ändern) für jedes einzelne *CHAR-Zeichen.
Die CPF die hochkommt wenn man auf ne Position zugreift die es nicht gibt abfangen...
Voila...
Weil die CPF-IDs sind doch auch bei Multilanguage immer gleich?
k.
-
Verbesserungsvorschlag:
Um Ressourcen zu sparen, sollte man besser von vorne nach hinten dann lesen. Sonst werden zu viele Fehlermessages produziert.
Also von vorne nach hinten und beim ersten ungültigen Lesen Schleife abbrechen...
k.
-
Danke für die Ideen.
Ich denke ich mache das in einer Schleife.
Gruss
Ralph
-
Ich würde da eher das binäre Halbierungsverfahren anwenden. Da eine DTAARA immer noch nur 2000 Bytes lang sein kann, kommt man mit max. 11 Zugriffen hin (2^11=2048).
Bei einer DTAARA mit einer Länge > 11 Zeichen bist du dann sehr viel schneller als über eine sequentielle Schleife.
-
Grundsätzlich stimme ich dem zu.
Nur wie programmiert man das halbwegs vernünftig im CL?
Ne Schleife braucht mit DECLARE na sagen wir mal 7 Zeilen oder irgendwie sowas in der Richtung.
Bei ner Binärsuche muss ich doch immer die maxlen und die validlen mitziehen und je nachdem halbieren, zuzählen, entscheiden usw.
Gibts da ne knackige Formel für - umgesetzt in ein paar kurze Statements?
kuempi
Nachtrag:
ok habs mal gerade durchgespielt.
Nen 10-Zeiler oder so bei Binärsuche.... toll was alles so geht.
k.
-
Der Thread ist zwar schon ein Jahr alt, aber trotzdem:
würde mich wundern, wenns dafür nich nen API gibt.
Das geht nur per MI:
RSLVSP: Get Systempointer from Objekt
SETSPPFP: Get Spacepointer from Systempointer
Das API QWCRDTAA liefert nicht nur den Inhalt, sondern auch Type und Länge von Datenbereichen zurück.
Ist allerdings direkt aus CL nicht nutzbar; da muß man schon ein Kurzprogramm zum Aufruf drumsetzen.
Gruß,
Werner.
-
Dieses API ist identisch zum RTVDTAARA !
Es dient dazu, eben aus HLL's auch auf DTAARA's zuzugreifen, da aus diesen CMD's mit Rückgabeparametern nicht aufrufbar sind.
Im CLP bleibt es beim RTVDTAARA.
Allerdings kann man durch Nutzung des API's auf MONMSG verzichten und die Meldungen im Joblog vermeiden.
API's sind im Übrigen aus CLP genausogut oder schlecht aufrufbar wie in HLL's (RPG/COBOL/usw.).
Similar Threads
-
By MatthiasK in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 10-01-07, 13:26
-
By ulbrecht in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 06-12-06, 17:06
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 13-11-06, 07:31
-
By M.Kasper in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 25-08-06, 07:32
-
By JonnyRico in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 30-03-06, 12:33
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