PDA

View Full Version : RPG: Variablen Inhalt "ab584" in "AB584" wandeln??



JonnyRico
03-04-03, 07:42
Hallo,

kann mir jemand sagen wie ich in RPG aus kleinen Buchstaben große mache? Gibt es dafür einen Befehl oder wie kann ich das am besten lösen? Es wird beim starten des Programms die Variable als Parameter übergeben und dann im RPG in eine Datei geschrieben. Wenn in dem Parameter aber kleine Buchstaben vorhanden sind sollen Sie durch große ersetzt werden und in anschluss weggeschrieben werden. Geht sowas? Vielen Dank im Voraus.

mfg

Sascha

RobertMack
03-04-03, 07:58
Hallo Sascha,

das geht mit XLATE und zwei Konstanten (I-Zeilen) mit den auszutauschenden Zeichen:

I 'abcdefghijklmnopqrst-C LO
I 'uvwxyzéäöü'

I 'ABCDEFGHIJKLMNOPQRST-C HI
I 'UVWXYZEÄÖÜ'

C LO:HI XLATEvonFeld nachFeld

Gruß, Robert

malzusrex
03-04-03, 08:27
Hallo Sascha,
ich habe da ein kleines Tool in RPGLE zum Umsetzen von Text. Ist nur so als Anregung


*
* Programm dient zur Umwandlung von Texten
*
* Übergabe Parameter
* text 255 den zu konvertierenten Text
* art 2 Art der Umwandlung
* 'KG' = klein --> GROß
* 'GK' = GROß --> Klein
* '1G' = erster Buchstabe GROß rest klein
* 'ÖO' = ö,Ö,ü,Ü,ä,Ä --> oe,OE,ue,UE,ae,AE
* 'OÖ' = oe,OE,ue,UE,ae,AE --> ö,Ö,ü,Ü,ä,Ä
*
* ret_code 1 Fehlerzeiger ist 'F' wenn art nicht gültig
*
*
d sds
d parmanz *parms
d job 244 253
d user 254 263
d
d
d art s 2 Umwandluns-Kz
d ret_code s 1 Fehlerzeiger
d text s 255
d pos s 3 0 Position im String
d ds
d xtext 255 Umsetzungstxt
d erstes_zei 1 overlay(xtext:1)
d
d low c const('abcdefghijklmnopqrstuvwxyz')
d upp c const('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
d

c Select
c When art = 'KG'
c Exsr klein_gross
c When art = 'GK'
c Exsr gross_klein
c When art = '1G'
c Exsr erster_gross
c When art = 'ÖO'
c Exsr umlaut_1
c When art = 'OÖ'
c Exsr umlaut_2
c Other
c If parmanz = 3
c Eval ret_code = 'F'
c Endif
c Endsl
c
c Eval text = xtext
c Eval *inlr = *on
*
*
****************** klein_gross *******************************************
*
*
c klein_gross Begsr
c*
c low:upp xlate xtext xtext
c*
c Endsr
*
*
****************** gross_klein *******************************************
*
*
c gross_klein Begsr
c*
c upp:low xlate xtext xtext
c*
c Endsr
*
*
****************** erster_gross ******************************************
*
*
c erster_gross Begsr
c*
c upp:low xlate xtext xtext
c low:upp xlate erstes_zei erstes_zei
c*
c Endsr
*
*
****************** umlaut_1 **********************************************
*
*
c umlaut_1 Begsr
c*
c Eval pos = %scan('ö':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('oe':xtext:pos:1)
c Eval pos = %scan('ö':xtext)
c Enddo
c Eval pos = %scan('Ö':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('OE':xtext:pos:1)
c Eval pos = %scan('Ö':xtext)
c Enddo
c Eval pos = %scan('ü':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('ue':xtext:pos:1)
c Eval pos = %scan('ü':xtext)
c Enddo
c Eval pos = %scan('Ü':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('UE':xtext:pos:1)
c Eval pos = %scan('Ü':xtext)
c Enddo
c Eval pos = %scan('ä':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('ae':xtext:pos:1)
c Eval pos = %scan('ä':xtext)
c Enddo
c Eval pos = %scan('Ä':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('AE':xtext:pos:1)
c Eval pos = %scan('Ä':xtext)
c Enddo
c*
c Endsr
*
*
****************** umlaut_2 **********************************************
*
*
c umlaut_2 Begsr
c*
c Eval pos = %scan('oe':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('ö':xtext:pos:1)
c Eval pos = %scan('oe':xtext)
c Enddo
c Eval pos = %scan('OE':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('Ö':xtext:pos:1)
c Eval pos = %scan('OE':xtext)
c Enddo
c Eval pos = %scan('ue':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('ü':xtext:pos:1)
c Eval pos = %scan('ue':xtext)
c Enddo
c Eval pos = %scan('UE':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('Ü':xtext:pos:1)
c Eval pos = %scan('UE':xtext)
c Enddo
c Eval pos = %scan('ae':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('ä':xtext:pos:1)
c Eval pos = %scan('ae':xtext)
c Enddo
c Eval pos = %scan('AE':xtext)
c Dow pos > *zeros
c Eval xtext = %replace('Ä':xtext:pos:1)
c Eval pos = %scan('AE':xtext)
c Enddo
c*
c Endsr
*
*
****************** *inzsr ************************************************
*
*
c *inzsr Begsr
c*
c *entry Plist
c Parm text
c Parm art
c Parm ret_code
c
c
c Eval xtext = text
c*
c Endsr


Gruß Ronald

Fuerchau
03-04-03, 10:48
Bei der Übersetzung von Umlauten kann es zu Problemen kommen, wenn die CCSID der Quelle des RPG-Programmes abweicht von der CCSID des ausführenden Job's !
Programmkonstanten unterliegen NICHT der automatischen Konvertierung in die korrekte CCSID.
Da die Umlaute aber je nach CCSID einen anderen Hex-Code haben, kann es später dazu kommen, dass Umlaute nicht übersetzt werden.

Als Ergänzung zum obigen Programmvorschlag sollte man daher die Konstanten "ABC...ÄÖÜ" und "abc...äöü" aus eienm Objekt mit CCSID lesen (Erstinitialisierung). Hierzu eignet sich entweder eine Datei oder eine MSGF mit korrekter CCSID.