[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Oct 2015
    Beiträge
    109

    Binary in Packed.

    Hallo zusammen,

    ich versuche Byte-Werte wieder in das Packed Format zu überführen.
    Dafür habe ich Folgendes versucht:

    Code:
    D DS_Test         DS                                                                           
    D $$_Byte                        2B 0                             Byte................
    D $$_Packed                      3P 0 overlay($$_Byte)            Dateiname...........
    Das funktioniert auch für 2B in 3P.
    Möchte ich aber 5B und 8P verwenden, erhalte ich den Fehler:
    "Mit dem Schlüsselwort OVERLAY definiertes Unterfeld ist zu groß"

    Stimmt da einfach mein Größenverhältnis nicht?
    5B sollte doch auf 8P und 9P passen?

    Grundlage meiner Annahme ist:
    Code:
    SELECT DBIILN, DBINLN  
    FROM qadbilfi          
    where DBIITP  = 'P'    
    group by DBIILN, DBINLN
    order by dbinln asc

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Also Binary in Packed geht so ja gar nicht, da du bei Packed ja ein Vorzeichen in der rechten Tetrade hast.
    Oder wofür soll das gut sein?
    Wenn du mit SQL umgehst gib in Zielvariablen doch direkt den korrekten Typ an:

    5I 0 = 2-Byte Binär
    10I 0 = 4 Byte Binär
    20I 0 = 8 Byte Binär

    Statt I kann man nun auch U für Unsigned verwenden.
    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

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... wieso reicht da keine einfache Zuweisung - oder stehe ich da auf dem Schlauch und habe das Problem nicht erkannt?

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Oct 2015
    Beiträge
    109
    Also das Problem ist, dass wir diese Werte aus einem Pointer bekommen. Char und Zoned können wir umsetzen, an packed hakt es.

    Genau, ne passende Zuweisung suchen wir.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Auch mit Pointer (based Struct) kannst du statt 4B o.ä. nun besser die I-Varianten verwenden.
    Diese werden nun native unterstützt, eine Umwandlung in Packed ist nicht mehr erforderlich.
    B-Typen sind noch OPM.
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... wenn das dazu dienen soll ein record image eines Triggers aufzulösen, das würde ich mir ersparen (da kann man das gesamte Image auf eine passende DS schieben und das wars). Ansonsten brauchst Du doch nur den Pointer mit der Adresse des passenden Felds mappen und den Wert auslesen.
    Eleganter und besser lesbar geht das mit einer subprocedure, die den passender Typ per reference erwartet.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Oct 2015
    Beiträge
    109
    Danke euch Beiden! Nein das ist nicht für ein record image (das wäre zu schön ).
    Wir versuchen jetzt mal beide Methoden. Eine Subprocedure soll es eh werden, versuche sinnvolle Abschnitte immer so zu gliedern.

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... geht auch ganz konventionell:
    - passende Variablen per overlay mit alpha vars überlagern
    - auf eine Alpha variable mappen
    - mit %subst auf die passende draufheben
    - auslesen

    Vermeiden sollte man immer die "Kaninchen aus dem Hut" Variante sprich: Zuweisung an x, Weiterverarbeitung von y und man sieht erst, was wirklich passiert, wenn man 3 Seiten hochblättert. Das alleine spricht schon für subprocedures. Bei y = hex2packed4 (x) sieht man intuitiv, was da passiert.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Das funktioniert auch nicht für 2B in 3P !!!

    Binär und Gepackt haben intern völlig unterschiedliche Darstellungen.
    Die Zahl vor dem Typ steht außerdem für die Anzahl der Ziffern.
    Die Anzahl der intern tatsächlich benötigten Bytes wird von RPG selbst bestimmt.

    Warum könnt ihr mit binären Feldern nicht direkt arbeiten?

    Zitat Zitat von dholtmann Beitrag anzeigen
    ich versuche Byte-Werte wieder in das Packed Format zu überführen.
    Dafür habe ich Folgendes versucht:

    Code:
    D DS_Test         DS                                                                           
    D $$_Byte                        2B 0                             Byte................
    D $$_Packed                      3P 0 overlay($$_Byte)            Dateiname...........
    Das funktioniert auch für 2B in 3P.
    Möchte ich aber 5B und 8P verwenden, erhalte ich den Fehler:
    "Mit dem Schlüsselwort OVERLAY definiertes Unterfeld ist zu groß"

    Stimmt da einfach mein Größenverhältnis nicht?
    5B sollte doch auf 8P und 9P passen?

  10. #10
    Registriert seit
    Oct 2015
    Beiträge
    109
    Hallo zusammen, danke für eure Tips.
    habe es jetzt so gelöst, dass ich den ersten Trigger auf ein AlphaFeld mappe, den Substring in ein neues Alphafeld schiebe, darauf einen neuen Pointer setze und den als Basis für ein packed Feld nehme.
    D newpointer S *
    D APacked8 S 5A
    D Packed8 S 8P 0 Based(newpointer)
    c eval APacked8 = %subst($$_Var:1:byteleng)
    c eval newpointer = %addr(APacked8)

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Was du da treibst verstehe ich überhaupt nicht.
    Wenn ich im Trigger bin, habe ich ein After/Before-Immage in 2 Based-Strukturen (ggf. Qualified).
    Die Pointeradresse der Strukturen setze ich anhand der Trigger-Definitionen.
    Nun kann ich auf die Immages native mit Feldnamen zugreifen.
    Schließlich weiß der Trigger doch, für welche Datei er arbeitet.
    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
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Was du da treibst verstehe ich überhaupt nicht.
    Wenn ich im Trigger bin, habe ich ein After/Before-Immage in 2 Based-Strukturen (ggf. Qualified).
    Die Pointeradresse der Strukturen setze ich anhand der Trigger-Definitionen.
    Nun kann ich auf die Immages native mit Feldnamen zugreifen.
    Schließlich weiß der Trigger doch, für welche Datei er arbeitet.
    ... naja, wenn ich einen Universal Trigger schreiben will, der erst zur Laufzeit weiß, welche Datei er am Wickel hat... (würde ich allerdings nicht so machen)...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •