View Full Version : Suchen/Ersetzen?
Matthias.Hayn
09-07-02, 13:04
Hallo zusammen,
wie realisiere ich am schnellsten eine Suchen/Ersetzen Funktion in einer physischen Datei auf der AS400?
Im konkreten Fall möchte ich in einem Feld der Datei z-B. den Eintrag BRF 20-00-001/002 durch BRF 20-00-001 ersetzen. Leider sind die Einträge immer unterschiedlich lang, z.B. git es auch EF 20-00-001/002.
D.h. ich suche immer '001/002' und will dieses durch '001' ersetzen.
Geht das mit 'Bordmitteln' direkt auf der AS400?
Gruß
Matthias
Sofern der zu ersetzende String in dem Feld immer an fester Position steht, geht es mit SQL-Mitteln: etwas wie folgt:
1) STRSQL(Sitzung starten)
2) Update LIB/FILE
SET FELD = substr(FELD, 1 , 10)!!
"001"!!substr(FELD,18, 3)
where substr(Feld, 11, 7) = "001/002"
/*Kommentar: sofern 001/002 immer an z. B. Position 11 stehen würde und das Feld 20 Stellen lang wäre */
Ansonsten wüßte ich nur den Weg über ein z. B. Cobolprogramm, daß die Datei Satzweise liest und mit dem wunderbar komfortablen Befehl INSPECT REPLACING arbeitet.
Vielleicht hilft's weiter.
Gruß
Klaus
Es geht auch mit SQL aber etwas komplizierter:
update myfile
set feld= substr(feld, 1, posstr(feld, '001/002') - 1) concat '001'
where feld like '%001/002%'
Die Funkion posstr ist nicht schlecht, aber was macht man mit der restlichen Zeichenkette hinter dem zu ersetzenden Wert?
update myfile
set
feld=substr(feld, 1, posstr(feld, 'ab') - 1) concat '**' concat
substr(feld, posstr(feld, 'ab') + 2, 100 - posstr(feld, 'ab') + 2)
where feld like '%ab%'
das feld ist in diesem fall 100 zeichen lang
die 2 ist in dem fall die länge des strings der ersetzt wird
gruß ronald
[Dieser Beitrag wurde von malzusrex am 10. Juli 2002 editiert.]
Danke Ronald, ist schön, an den Problemen anderer mitzuarbeiten und mitzulernen. Den posstr kannte ich in dieser Form bisher nicht.
Gruß
Klaus
Hallo!
Sicher läßt sich das Suchen/Ersetzen-Problem am schnellsten per SQL lösen, aber da ich immer auch nach einer RPG-Lösung ausschau halte, verweise ich auf http://www.netshare400.com/cgi-bin/DSPSAMP?file=QRPGLESRC&mbr=F.REPLACE . Kennt jemand für RPG noch eine bessere Lösung?
Freundliche Grüße
Matthias
PS: Danke an alle, die hier immer wieder tolle Tips posten.
Hallo zusammen,
eine einfache Methode um in RPG einen String zu ersetzen ist die Built-In-Function %Replace.
Anbei ein kleines Beispiel:
D $TextIn S 50 inz('Anfangs-Wert')
D $TextOut S 50 inz(*Blanks)
C eval $TextOut = %Replace('End': $TextIn: 1: 7)
C eval $TextOut = %Replace('End': $TextIn:
C %Scan('Anfangs': $TextIn):
C %len ('Anfangs'))
Das Ergebnis ($TextOut) ist jeweils 'End-Wert'
B.Hauser