PDA

View Full Version : Hexa-Wert eines Zeichens



Seiten : [1] 2

lossin
07-09-09, 14:36
Hallo @ all,

wie ermittele ich den Hexa-Wert eines Zeichens unter RPG mit Bordmitteln ?
Problem : Wir bekommen von einem Partner Datensätze mit Umlauten gesendet, die die i5 'entstellt' darstellt. Zum Beispiel statt eines 'ü' erhalte ich ein 'e' mit 2 Punkten drauf.
Nach der Datenübernahme möchte ich die entsprechenden Zeichen umsetzen.
Oder gibt es einfachere Lösungen als die Prüfung des Hexa-Wertes eines Zeichens ?

Vielen Dank im Voraus !

Fuerchau
07-09-09, 15:15
Die Frage ist, wie stellst du die Daten denn ab und kopierst sie in eine PF?

Beim CPYFRMSTMF kannst du eine andere CCSID (z.B. 1252) angeben.

lossin
07-09-09, 15:19
Danke für die Antwort.
Das habe ich jetzt auch so eingebaut.
Mein Problem sind jetzt noch bereits im System vorhandene Sätze, wo ich die Umlaute konvertieren will/muß.

jgv
07-09-09, 15:24
Hallo

Den Hex-Wert eines Zeiches kannst Du beispielsweise so ermitteln:




d HexToInt ds
d hiChar 1A
d hiInt 3u 0 overlay(hiChar:1)

Gruss

Jan

BenderD
07-09-09, 15:59
... das geht am Besten mit SQL, beim Cast kann man da die CCSID angeben, eventuell braucht man da einen Zwischencast nach 65535.

D*B


Danke für die Antwort.
Das habe ich jetzt auch so eingebaut.
Mein Problem sind jetzt noch bereits im System vorhandene Sätze, wo ich die Umlaute konvertieren will/muß.

B.Hauser
07-09-09, 16:26
Wenn es sich allerdings nur um die Umlaute handelt, kann man mit dem SQL-Befehl Replace die falschen Werte in die richtigen umsetzen:


Update MySchema/MyTable
Set MyField = Replace(MyField: WertAlt: WertNeu);

Birgitta

Pikachu
07-09-09, 16:28
Oder in RPG mittels XLATE.

Fuerchau
07-09-09, 20:24
Dieters Tipp ist der Beste:

Z.B.:
update myfile
set field = cast(cast(field as char(nn) ccsid 65535) as char(nn) ccsid 273)
where ...

Allerdings musst du die Ursprungs-CCSID ja kennen.

lossin
08-09-09, 09:53
Erst mal Danke für eure Hilfe !

@Pikachu :
Wie bekomme ich Folgendes mit XLATE hin ?
Wenn Hexa-Wert-des-Zeichens = 99 dann Neuer-Zeichen-Wert = 'ß'

@all
oder geht das auch anders unter ILERPG ?

Fuerchau
08-09-09, 09:58
Feld = %xlate(x'99nnmm' : 'ßNM': Feld);

Schließlich kannst du je Hexkonstanten direkt angeben.

In SQL:
update Myfile
set field = replace(field, x'99nnmm', 'ßNM')