PDA

View Full Version : Find/Replace eines Text-Strings mit RPG



R.Plaugraud
07-07-05, 17:59
Hallo zusammen,

eine ganz einfache Frage, aber da ich schon länger nicht mehr auf AS/400 programmiert habe, kriegs ich einfach nicht hin.

Aufgabenstellung ist:
einem RPG-Programm sollen per Parameter ein Text-String, der Such- und der Replace-String übergeben werden. Dann soll im Text-String gesucht und der Replace-String ersetzt werden.
Alternative Variante bzw. Erweiterung: Die Sätze einer Datei sollen sequentiell durchgelesen werden und die Textstrings nach obiger Methode ersetzt werden, dann entweder upgedatet oder noch besser in ein neues Member ausgegeben werden.

Ich denke dies wurde in der Vergangenheit bereits mehrfach gelöst. Vielleicht hat jemand eine simple Lösung dafür.

Grüsse,
Rudolf.

B.Hauser
07-07-05, 20:05
Was ist Dein Problem das Suchen und Ersetzen?

Dies kann relativ einfach mit der Built-in-Funktion %Replace() bewerkstelligt werden.

%Replace(NeuerString: StartPosition: LängeAlterString)

Es wird jeweils nur das erste Vorkommen ersetzt. Wenn also alle Vorkommen ersetzt werden müssen, muss eine Schleife programmiert werden.

Im folgenden Beispiel wird 'ABC' durch 'ZXYDE' ersetzt.


D Text50 S 50A inz(*Blanks)
D MyString S 10A varying
D NewString S 10A varying
D Position S 5U 0
*---------------------------------------------------------
/free
Text50 = 'ABCxyABCvwABC123ABC50';
Dsply Text50;
MyString = 'ABC';
NewString = 'ZXYDE';
Position = 1;

DoW %Scan(MyString: Text50: Position) <> *Zeros;
Text50 = %Replace(NewString: Text50:
%Scan(MyString: Text50: Position): %Len(MyString));
Dsply Text50;
Enddo;

Dsply Text50;
*INLR = *ON;
/End-Free


Falls Du bereits auf Release V5R3M0 bist, kannst Du auch die SQL-Funktion REPLACE verwenden, die alle Vorkommen ersetzt.


c/EXEC SQL Set :Text50 = Replace(:Text50, :MyString, :NewString)
C/END-EXEC


Birgitta

R.Plaugraud
08-07-05, 15:13
Hallo Birgitta,
das ging ja schnell mit Deiner Antwort. Dies ist ganau das was ich brauche.
Jetzt muss ich nur noch ein einfaches I/O-Programm schreiben, satzweise eine Source-Datei durchlesen und bestimmte Strings austauschen. Dann noch ein CLP darüber und fertig. Das krieg ich gerade noch hin.

Besten Dank.
Rudolf.