Anmelden

View Full Version : Unicode mit RPG verarbeiten



SchoberS
10-01-08, 15:50
Hallo,

ich möchte ein Unicode-Datenbankfeld einlesen, auf einem DSPF ausgeben, dort verändern und dann wieder in die Datenbank zurückspeichern.

1.Dateifeld

A R UNI0F1
A DATFLD 3G CCSID(13488)
2. DSPF Definition

A R B060F1
A FLD003 3G B 18 28
3. ILE Programm

FTESTUNID CF E WORKSTN
FTESTUNI IF A E DISK
*
C read testuni
C eval FLD003 = datfld
*
C exfmt B060F1
*
C eval datfld = %ucs2(FLD003)
C write uni0f1
*

Das Programm läßt sich leider nicht umwandeln. Folgende Fehler erscheinen :

Z u s ä t z l i c h e D i a g n o s e n a c h r i c h t e n
Msg-ID Sv Nummer Folge Nachrichtentext
*RNF0202 20 11 000500 IMPLICIT STRING CONVERSION IS NOT SUPPORTED FOR OPERAND
FLD003 WITH CCSID *GRAPH:*IGNORE.
*RNF0558 20 15 000900 Der erste Parameter für %UCS2 ist ungültig; %UCS2 wird
ignoriert.

Mache ich grundsätzliche etwas falsch, oder wo liegt der Fehler ?

Fuerchau
10-01-08, 16:18
UNICODE unterliegt einer speziellen Behandlung.

UNICODE-Felder sind vom Typ C und nicht G und ohne CCSID (das weiß RPGLE dann selber).

Mittels %UCS2 kannst du dieses füllen und mittels %CHAR auslesen.

Für alle anderen Konvertierungen benötigst du die Konvertierungs-API's.

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/apis/nls3.htm

Am Besten eignet sich da das Convert a Graphic Character String (CDRCVRT, QTQCVRT) API (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/apis/CDRCVRT.htm)

Felder vom Typ G konnen nicht so einfach konvertiert werden.

Übrigens:
UNICODE wird in DSPF's gar nicht unterstützt sondern nur DBCS (obwohl ja UNICODE fast wie DBCS ist).

B.Hauser
11-01-08, 09:00
Hallo,

die Meldung besagt, dass die autmomatische Stringkonvertierung mit der Angabe CCSID *GRAPH *IGNORE nicht unterstützt wurde.

Dies kann über das Schlüssel-Wort CCSID in den H-Bestimmungen vordefiniert bzw. geändert werden. Die angegebene CCSID wird für alle Felder verwendet, für die keine CCSID angegeben wurde (z.B. Bildschirmfelder!)
Versuche in den H-Bestimmungen die Konvertierung wie folgt festzulegen:

H CCSID(*UCS2)

Birgitta