[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    125

    Post Suchen/Ersetzen?

    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
    Gruss

    Matthias Hayn

  2. #2
    Registriert seit
    Jan 2002
    Beiträge
    53

    Post

    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

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207

    Post

    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%'
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jan 2002
    Beiträge
    53

    Post

    Die Funkion posstr ist nicht schlecht, aber was macht man mit der restlichen Zeichenkette hinter dem zu ersetzenden Wert?

  5. #5
    Registriert seit
    May 2002
    Beiträge
    1.121

    Post

    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.]

  6. #6
    Registriert seit
    Jan 2002
    Beiträge
    53

    Post

    Danke Ronald, ist schön, an den Problemen anderer mitzuarbeiten und mitzulernen. Den posstr kannte ich in dieser Form bisher nicht.

    Gruß
    Klaus

  7. #7
    Registriert seit
    Jul 2002
    Beiträge
    53

    Post

    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/D...&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.

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.869

    Post

    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •