[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    385

    RPG im String ein Zeichen ersetzen

    Hallo zusammen.

    Ich habe einen String und dort muss ich ein Zeichen z.B. '%' , welches auch mehrfach mittendrin vorkommen kann, durch z.B. Proz. ersetzen.

    Leider funktioniert die Replace Funktion nicht, da diese knallhart auch die hinteren Zeichen überschreibt.

    Bsp.

    Der Satz soll von 4% auf 5% angehoben werden.

    Ergebnis.
    Der Satz soll von 4 Proz. auf 5 Proz. angehoben werden.


    Hat einer einen Lösungsvorschlag?

    Danke an alle Helfenden.

  2. #2
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    Hallo ExAzubi,

    schön, dass alle dieselben Probleme haben...

    Ich hatte damals nichts gefunden und es programmiert. Vielleicht hilft Dir das?

    Das Bsp ersetzt in einem String die Zeichenkette SWNETIxxx durch den Parameter und füllt auf 10 Zeichen auf.

    Ohne Gewähr, kann man bestimmt auch noch schöner machen.

    Gruß
    Christian
    Code:
     *                                                                
     *----- Prototypen                                                
    D pReplace        PR                                              
    D  $opt                        100    const options(*varsize)     
    D  $val                        100    const options(*varsize)     
    D  $vallen                       5  0 const                       
    D  $cmd                        200                                
     *                                                                
    ...
    callp     pReplace('SWNETIxxx'      :p$outq      :10:z)  
    ...
     
    P pReplace        B                                                                            
     *========                                                                                     
     *                                                                                             
    D pReplace        PI                                                                           
    D  $opt                        100    const options(*varsize)                                  
    D  $val                        100    const options(*varsize)                                  
    D  $vallen                       5  0 const                                                    
    D  $cmd                        200                                                             
     *                                                                                             
    C     ' '           checkr    $opt          optlen            5 0    50                        
    C  n50              goto      pReplaceX                                                        
    C                   if        %subst($opt: 1 :optlen) =                                        
    C                             %subst($val: 1 :$vallen)                                         
    C                   goto      pReplaceX                                                        
    C                   endif                                                                      
     *                                                                                             
    C     $vallen       subst(p)  $val:1        val             100     
     *                                                                   
     *--- Parameter ggf. einsetzen                                       
    C                   move      *zero         n5                5 0    
    C                   eval      n5 = %scan(%trimr($opt):$cmd)          
    C     n5            dowgt     *zero                                  
     *                                                                   
    C     n5            ifeq      *zero                                  
    C                   eval      $cmd = %trim(val) +                    
    C                             %subst($cmd: optlen)                   
    C                   else                                             
    C                   eval      $cmd = %subst($cmd: 1: n5-1) +         
    C                             %trim(val) +                           
    C                             %subst($cmd: n5+optlen)                
    C                   endif                                            
     *                                                                   
    C                   eval      n5 = %scan(%trimr($opt):$cmd)          
    C                   enddo                                            
     *                                                                   
    C     pReplaceX     tag                                              
     *    =========                                                      
    P pReplace        E                                                  
     *

  3. #3
    Registriert seit
    Sep 2003
    Beiträge
    18
    Habe ich etwas falsch verstanden? Warum führt die %replace Funktion nicht zum Ergebnis?

    Code:
    d String          s            100a                                  
                                                                         
    c                   eval      String = 'Der Satz soll von 4% auf 5%' 
    c                             +' angehoben werden.'                  
                                                                         
    c                   do        *hival                                 
    c     '%'           scan      String                                 
    c                   if        not %found                             
    c                   leave                                            
    c                   else                                             
    c                   eval      String=%replace(' Proz.':String:        
    c                             %scan('%':String):1)                   
    c                   endif                                            
    c                   enddo                                            
                                                                 
    c                   eval      *inlr='1'
    Gruß Henke

  4. #4
    Registriert seit
    Apr 2004
    Beiträge
    54
    Ich denke das von mehreren Zeichen die im String orkommen nur ein Bestimmtes Ersetzt werden soll. Replace ersetzt aber alle Zeichen.

    Das Problem ist also erstmal das zu ersetzende Zeich zu lokalisieren.

    Das kann man z.B. mit CHECK machen

    oder man schreibt den String in ein Arry und liest ihn Zeichenweise.

  5. #5
    Registriert seit
    Sep 2003
    Beiträge
    18
    Die Position des zu ersetzende Zeichen ermittelt man doch mit
    Code:
    %scan('%':String)
    und bei der %replace Funktion gibt man doch an in welcher Länge ersetzt werden soll.

    %REPLACE(replacement string: source string{:start position {:source length to replace}})

    Ggf. sogar 0, dann wird nichts im Ursprungsstring ersetzt, sondern nur der neue Text eingefügt.

    ExAzubis Problem war doch, dass die hinteren Zeichen Knallhart überschrieben werden, das kann ich irgendwie nicht nachvollziehen. Selbst bei der Benutzung von 2 Parametern wird der neue Text nur eingefügt und nichts überschrieben.

    http://publib.boulder.ibm.com/infoce...c092508602.htm

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. String zeichen finden under ersetzten.
    By kr1s in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 28-08-06, 15:37
  3. Batch-Datei durch RPG ersetzen
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 08-03-06, 11:15
  4. String Objekt aus RPG an Java übergeben ????
    By hoeppe in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 22-07-05, 09:46
  5. Umwandlung von Zahlen zum String (RPG)
    By Schorsch in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-10-04, 15:38

Berechtigungen

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