-
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
-
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.
-
... wieso reicht da keine einfache Zuweisung - oder stehe ich da auf dem Schlauch und habe das Problem nicht erkannt?
D*B
-
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.
-
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.
-
... 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
-
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.
-
... 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
-
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 von dholtmann
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?
-
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 APacked8 S 5A
D Packed8 S 8P 0 Based(newpointer)
c eval APacked8 = %subst($$_Var:1:byteleng)
c eval newpointer = %addr(APacked8)
-
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.
-
Zitat von Fuerchau
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
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