-
Datamatrix / Dezimal / hexadezimal
Hallo Zusammen,
ich erstelle gerade einen Datamatrix Code mit 28 Byte.
Klappt auch alles ganz gut, wenn ich die Felder initialisiere.
28 Datenbytes
Gesamtstring: 44 45 41 12 1C 01 2B B7 45 6D 00 BE 57 8D 00 B6 00 00 0E 01 15 56 00 00 00 00 00 00
Sobald ich aber eine Variable einstelle ist der Barcode nicht mehr lesbar.
DS inz
Datamatrix 1 - 28
Postnr 1 3 inz(x'444541')
Frankierart 4 4 inz(x'12'
Version 5 5 inz((x'1C)
usw.
Habe mir ein PGM zurechtgelegt, dass mir aus einem Dezimalwert einen
Hexadezimalen Wert zurück gibt,
Bsp. " Feld Frankierart"
errechneter Hexadezimalwert = 12 ( errechnet aus Dezimal 18)
Wie bringe ich diesen Wert "12" im RPG in das einstellige Bytefeld (Frankierart) ohne INIT ?
Vielen Dank im Voraus
PF
-
Hallo.
Knstante definieren und moven ?
D Franki C CONST(X'12')
Gruß Joe
-
Hallo,
da bin ich dann soweit wie vorher (CONST gefüllt mit x'12 = gleich wie inz(x'12')
Konstante geht hier in diesem Fall nicht. Ich muss einen variablen Wert
in das 4 Byte bringen( Frankierart)
PF
-
Ganz einfach:
Definiere für jedes Byte ein einstellige Integer Variable (3 U 0) und addiere in dieses jeweils den gepackten Wert.
Lege die einzelnen Bytes/Variablen als Feldgruppen-Elemente an und überlagere die Feldgruppe mit einem alphanumerischen String.
Deine Umrechnungsorgie kannst Du Dir dann sogar sparen.
Code:
D DS DS
D String 28A
D ArrInt 3u 0 Dim(28) Overlay(String);
/Free
Clear DS;
ArrInt(1) = 18; //Jetzt sollte in String auf der 1.Stelle hex(12) stehen
/End-Free
Birgitta
-
Zitat von Peterfritz
Hallo,
da bin ich dann soweit wie vorher (CONST gefüllt mit x'12 = gleich wie inz(x'12')
Konstante geht hier in diesem Fall nicht. Ich muss einen variablen Wert
in das 4 Byte bringen( Frankierart)
PF
Wenn die Frankierart überschaubar ist, dann definiere diese doch als einzlne Konstanten
oder rechnen in HEX um.
Joe
-
Okay,
Birgitta war mal wieder schneller und eleganter.
Möchte mein Lösungsansatz aber auch noch zum Besten geben.
Ich nutze auch gleich den Dezimalwert
PHP-Code:
h dftactgrp(*no)
d True c *On
d False c *Off
d
d hex pr 1
d 3 0
d
d Frankierart s 1
d Wert s 3 0 Inz( 18 )
c Eval Frankierart = hex( Wert )
c
c Eval *InLr = True
p Hex b
d pi 1
d Zahl 3 0
d Zahl 3 0
d Rueckgabe s 1 inz( x'00' )
c If Zahl > 255
c Return Rueckgabe
c EndIf
c
c If Zahl >= 128
c Biton '0' Rueckgabe
c Eval Zahl -= 128
c EndIf
c If Zahl >= 64
c Biton '1' Rueckgabe
c Eval Zahl -= 64
c EndIf
c If Zahl >= 32
c Biton '2' Rueckgabe
c Eval Zahl -= 32
c EndIf
c If Zahl >= 16
c Biton '3' Rueckgabe
c Eval Zahl -= 16
c EndIf
c If Zahl >= 8
c Biton '4' Rueckgabe
c Eval Zahl -= 8
c EndIf
c If Zahl >= 4
c Biton '5' Rueckgabe
c Eval Zahl -= 4
c EndIf
c If Zahl >= 2
c Biton '6' Rueckgabe
c Eval Zahl -= 2
c EndIf
c If Zahl >= 1
c Biton '7' Rueckgabe
c Eval Zahl -= 1
c EndIf
c
c Return Rueckgabe
p Hex e
Gruß
Ronald
-
Hallo Birgitta,
erst mal vielen Dank.
Hört sich ja vielversprechend an.
Ich bin leider im ILE / RPG400 noch nicht so tief drin. Werde es aber versuchen.
Was mache ich z. Bsp in diesem Fall
Gleicher String:
im Byte 6 bis 10 habe ich eine 10 Stellige Post-Nr. zu vergeben ( 5028398445 = dezimal)
Vielen Dank im Voraus.
PF
-
Was soll in Byte 6-10 stehen
5028398445
Byte 6 = 50
Byte 7 = 28
Byte 8 = 39
Byte 9 = 84
Byte 10 = 45
Oder umgerechnet in HEX = 12BB7456D
6 = 01
7 = 2B
8 = B7
9 = 45
10 = 6D
??
Gruß
Ronald
-
Im ersten Fall, d.h. dass der gepackete Wert auf die Stellen 6-10 übertragen werden soll, musst Du lediglich die Positionen 6-10 als gepackt numerisches Feld definieren (11P 0) und anschließend den Wert übernehmen:
Code:
D DS1 DS Inz
D Alpha1 28A
D Dec 11P 0 Overlay(Alpha1: 6)
* Alternativ
D DS1 DS Inz
D Alpha1 28A
D Dec 6 10P 0
/Free
Dec = 5028398445;
Im zweiten Fall ist es ein bisschen trickier, da Integer-Felder nur 1 (= 3U 0), 2 (= 5U 0), 4 (= 10U 0) oder 8 (= 20U 0) Byte groß definiert werden können. 5028398445 muss in ein 8 Byte großes Feld addiert werden. Da Du jedoch 5 Byte benötigst müssen im Anschluss nur die Stellen/Bytes 4-8 in das eigentliche Text-Feld übernommen werden.
Etwa so:
Code:
D DS2 DS Inz
D Alpha2 28A
D Alpha2A 5A Overlay(Alpha2: 6)
D DS3 DS Inz
D Alpha3 8A
D Int 20U 0 Overlay(Alpha3)
/Free
Int = 5028398445;
Alpha2A = %Subst(Alpha3: 4);
Birgitta
Similar Threads
-
By Daniel Ritzmann in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 15-03-02, 15:37
Tags for this Thread
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