[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    10

    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

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    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.

  3. #3
    Registriert seit
    Mar 2006
    Beiträge
    10
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    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

  5. #5
    Registriert seit
    Aug 2004
    Beiträge
    923
    Zitat 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.

  6. #6
    Registriert seit
    Aug 2004
    Beiträge
    923
    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.

  7. #7
    Registriert seit
    Mar 2006
    Beiträge
    10
    Danke für die Ideen.

    Ich denke ich mache das in einer Schleife.

    Gruss
    Ralph

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    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

  9. #9
    Registriert seit
    Aug 2004
    Beiträge
    923
    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.

  10. #10
    Registriert seit
    Sep 2006
    Beiträge
    26
    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.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.).
    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

  12. #12
    Registriert seit
    Sep 2006
    Beiträge
    26
    Dieses API ist identisch zum RTVDTAARA !
    Nein.
    RTVDTAARA liefert mir den Wert der DTAARA, mindestens die Art muß ich kennen.

    QWCRDTAA liefert mir eben auch Art, Länge und ggfs. Anzahl Dezimalstellen:
    Retrieve Data Area (QWCRDTAA) API

    Grüße,
    Werner.

Similar Threads

  1. PAGRTT aus Printer-File ermitteln
    By MatthiasK in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 10-01-07, 13:26
  2. Fixtexte in Bildschirmdateien ermitteln
    By ulbrecht in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 06-12-06, 17:06
  3. Länge Zeichenkette bei Barcode PDF417?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 13-11-06, 07:31
  4. nach Insert neu gen. Datensatz ermitteln
    By M.Kasper in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 25-08-06, 07:32
  5. SQL Select mit SUM aus einer DB
    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
  •