[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Jul 2007
    Beiträge
    14

    Finden und Löschen

    Hallo zusammen,

    ich hab folgende Aufgabe, ich soll alle Werte, die einen Punkt beinhalten z. B. 770.35.008.000, ändern auf Werte ohne Punkt (77035008000), wobei die Punkte nicht immer an der selben Stelle stehen. Ich hab mir gedacht, ich schreib ein kleines RPG, mit SCAN und SUBST, wird es shon gehen, hab aber bald gemerkt, daß ich schon zu viel vergessen habe. Ich hab das dann mit MS ACCESS geändert. Aber ich würde gerne wissen, wie ich das in einem RGP lösen kann.

    Vielen Dank

    Thomas Gell

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von tmg Beitrag anzeigen
    Hallo zusammen,

    ich hab folgende Aufgabe, ich soll alle Werte, die einen Punkt beinhalten z. B. 770.35.008.000, ändern auf Werte ohne Punkt (77035008000), wobei die Punkte nicht immer an der selben Stelle stehen. Ich hab mir gedacht, ich schreib ein kleines RPG, mit SCAN und SUBST, wird es shon gehen, hab aber bald gemerkt, daß ich schon zu viel vergessen habe. Ich hab das dann mit MS ACCESS geändert. Aber ich würde gerne wissen, wie ich das in einem RGP lösen kann.

    Vielen Dank

    Thomas Gell
    ... wie wärs mit SQL?

    update mytable set myfield = replace(myfield, '.', '')

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Jul 2007
    Beiträge
    14
    Zitat Zitat von BenderD Beitrag anzeigen
    ... wie wärs mit SQL?

    update mytable set myfield = replace(myfield, '.', '')

    D*B
    ich bin begeistert, vielen Dank!!!

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenns um Sätze in einer Tabelle geht, ist SQL das schnellste.

    In RPG musst du vor 7.1 in einer Schleife mit %SCAN die Position ermitteln und dann mit %REPLACE das Zeichen entfernen.
    Ab 7.1 gibts die Funktion %SCANRPL.

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

    im RPG hatte ich da mal was gebastelt, um aus einen Alpha-Feld alles zu löschen, was keine Zahl war. (Telefonnummern-Feld)
    PHP-Code:
    d                                                  
    d DelNoNum        PR            15                 
    d                               15                 
    c                   
    If        MyFld  <> *Blanks                   
    c                   
    Eval      MyFld   =  DelNoNumMyFld )
    c                   EndIf  
    .....
    p DelNoNum        b                                                  
    d                 PI            15                                   
    d   String                      15                                   
    d Index           s              3  0                                
    d Laenge          s              3  0                                
    d Zahlen          c                   
    '0123456789'                   
                                                                         
    c                   Eval      Laenge = %Len( %Trim( String ) )       
    c                   For       Index 1 to Laenge                    
    c                   
    If        %Scan( %SubStString Index 1) :   
    c                                    Zahlen                        
    c                             = *Zeros                               
    c                   
    If        Index 1                              
    c                   
    Eval      String = %SubStString 14 )     
    c                   Else                                             
    c                   Eval      String = %SubStString     :       
    c                                              1          :       
    c                                              Index 1     ) +  
    c                                      %SubStString     :       
    c                                              Index 1  :       
    c                                              15 Index    )    
    c                   EndIf                                         
    c                   Eval      Laenge = %Len( %Trim( String ) )    
    c                   Eval      Index  Index 1                  
    c                   
    EndIf                                         
    c                   EndFor                                        
    c                                                                 
    c                   
    Return    String                              
                                                                      
    p DelNoNum        e 
    Zugegeben. Die VAriante im SQL ist natürlich eleganter.

    Gruß
    Ronald

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    PHP-Code:
    DPOS              S             10S 0 INZ                              
    DFELD             S            100A   INZ
    ('770.35.008.000')            
    D**********************************************************************
    C     '.'           SCAN      FELD          POS                    7778
    C     
    *IN78         DOWEQ     *ON                                      
    C                   
    EVAL      FELD = %REPLACE('':FELD:POS:1)           
    C     '.'           SCAN      FELD:POS      POS                    7778
    C                   ENDDO                                              
    C                   SETON                                            LR 

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Warum willst Du das unbedingt in RPG machen und nimmst nicht SQL?

    Code:
    update MySchema/MyTable
        set MyCol = Replace(MyCol, '.', '')
    Where ... ;
    Den Replace-Befehl kann man auch in embedded SQL verwenden:

    Code:
      Exec SQL  Set :MyCol = Replace(:MyCol, '.', '');
    Und schließlich gibt es auch ab Release 7.1 auch die Built-In-Funktion %ScanRpl(), die die gleiche Funktionalität wie der SQL Replace hat.

    Code:
    /Free
       MyCol = %ScanRpl('.': '': MyCol);
    /End-Free
    Birgitta
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Dec 2011
    Beiträge
    5
    not tested, aber als beispiel reicht es sicher:

    dow %scan('.': %subst(f15:1:%len(%trimr(f15))) : 1 ) <> *zero;
    f15 = %replace('':f15:%scan('.':f15):1);
    // im ersten arg als ersatzzeichen NICHTS ''
    dsplyf15;
    enddo;

    enjoy it

    hinweis: ich hab versucht eine lösung zu finden, die ohne extra zu definierende zwischenfelder auskommt.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nunja, wer's compliziert mag...
    Ich finde die SQL-Lösung am Einfachsten, die funktioneirt auch mit anderen Ersatzwerten (incl. auch Verlängern).
    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

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nunja, wer's compliziert mag...
    Ich finde die SQL-Lösung am Einfachsten, die funktioneirt auch mit anderen Ersatzwerten (incl. auch Verlängern).
    ... es wundert mich ja, dass Du nicht darauf hinweist, dass die SQL Funktion REPLACE erst ab Release V5R3 verwendet werden kann

    Birgitta
    Birgitta Hauser

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

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Tja, V5R3 ist nun schon so alt ...
    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

  12. #12
    Registriert seit
    Jul 2011
    Beiträge
    27
    Wenn man davon ausgeht, dass es wirklich nur Zahlen und Punkte gibt wurde es so auch funktionieren:
    dsply%char(%dec(%xlate('.':' ':'123.123.123'):9:0));
    Ist es eine Benutzereingabe sollte man bei sochen ausdrücken ehr vorsichtig sein.
    Um Benutzereingaben zu validieren und formatieren verwende ich normal Reguläre ausdrücke. (Einfach mal nach "regexp rpg ile" googeln)

Similar Threads

  1. Dateien aus dem IFS löschen
    By Bobou in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 16-01-07, 10:26
  2. Spooldateien automatisch löschen
    By Der_Unwissende in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 14-09-06, 09:35
  3. Satz löschen - ODBC
    By heini in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 27-06-06, 11:34
  4. Dateien in QDLS bzw. IFS über Explorer löschen
    By dino in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 22-05-06, 18:59
  5. Festplatten sicher löschen
    By usafft in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 20-04-06, 08:13

Berechtigungen

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