PDA

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

skipper_k
09-07-02, 14:15
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

Fuerchau
10-07-02, 09:37
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%'

skipper_k
10-07-02, 11:32
Die Funkion posstr ist nicht schlecht, aber was macht man mit der restlichen Zeichenkette hinter dem zu ersetzenden Wert?

malzusrex
10-07-02, 11:38
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.]

skipper_k
10-07-02, 11:45
Danke Ronald, ist schön, an den Problemen anderer mitzuarbeiten und mitzulernen. Den posstr kannte ich in dieser Form bisher nicht.

Gruß
Klaus

Gerlitz
12-07-02, 14:00
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.

B.Hauser
15-07-02, 07:03
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