[NEWSboard IBMi Forum]
Seite 2 von 3 Erste 1 2 3 Letzte
  1. #13
    Registriert seit
    Aug 2001
    Beiträge
    2.644
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Nicht herummaulen, sondern selber besser machen!
    wie - noch unleserlicher? Mit MI vielleicht? ;-)
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  2. #14
    Registriert seit
    Nov 2020
    Beiträge
    315
    Hier noch ein weiteres Beispiel:
    Code:
    EXEC SQL SET :rpg_var = regexp_replace (:rpg_var, '^(.{5})(?=[A-Z ])', '     $1'))
    Kurze Beschreibung:
    regexp_replace({Source String}, {Such Pattern}, {Ersetzen mit ...})

    Suchpattern:
    ^ --> Anfang der Zeichenkette, sonst hättest du ein ungewolltes Verhalten, wenn du später auch noch 5 Buchstaben/Blanks hast
    (.{5}) --> Beliebiges Zeichen 5 mal
    (?=[A-Z ]) --> Prüft ob der vorherige Wert (Beliebige 5 Zeichen) auf A-Z und Blank

    ' $1' --> Wenn die Prüfung TRUE ergibt, wird es mit diesem Wert ersetzt.

    lg Andreas

  3. #15
    Registriert seit
    Dec 2000
    Beiträge
    279
    und nochmal rein RPG
    **free
    dcl-s feld1 char(25) inz('A123456789012345678901234');
    dcl-s feld2 char(25) inz('A 12345678901234567890123');
    dcl-s feld3 char(25) inz('A B C12345678901234567890');
    dcl-s Ausgabe varchar(50) inz;
    dcl-s pos zoned( 5: 0 );

    pos = 1;
    ausgabe = feld1;
    dou pos > 5;
    if %subst(feld1 : pos:1) >= x'F0' and %subst(feld1 : pos:1) <= x'F9';
    ausgabe = ' ' + %subst(ausgabe :1:25-pos);
    endif;
    pos += 1;
    enddo;


    Viele Wege führen nach Rom bzw. zum Ergebnis
    Programmierung

  4. #16
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... da führen einige an Rom vorbei (wenn der String nicht Knast(#)-frei ist, Sonderzeichen enthält, Steuerzeichen enthält, mit -12345 anfängt oder 365,25 beginnt): knapp vorbei ist auch daneben.

    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/

  5. #17
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    @K_Tippi:
    Die Aufgabe ist nicht gelöst, da das Voranstellen von Leerzeichen nur erfolgen soll, wenn insgesamt die Bedingung nicht erfüllt ist.

    @Andreas:
    Die Prüfung sollte wohl auf "Not True" gesetzt werden "...?!...".
    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

  6. #18
    Registriert seit
    Nov 2020
    Beiträge
    315
    Zitat Zitat von Fuerchau Beitrag anzeigen
    @Andreas:
    Die Prüfung sollte wohl auf "Not True" gesetzt werden "...?!...".
    Ja vom logischen Aspekt müsste es so sein wie du geschrieben hast, das korrekte Ergebnis bekommst du jedoch mit dem von mir angegebenen Beispiel.

  7. #19
    Registriert seit
    Dec 2014
    Beiträge
    310

    Post

    Ok, muss hier noch bis Mittags die Zeit totschlagen - daher
    --> HIER DIE ULTIMATIVE LÖSUNG:

    Code:
    ​
    C                     MOVE INPUT     FELD24 24                 
    C                     MOVE INPUT     FELD23 23                 
    C                     MOVE INPUT     FELD22 22                 
    C                     MOVE INPUT     FELD21 21                 
    C                     MOVELINPUT     F1      1                 
    C           F1        COMP 'A'                    30           
    C  N30      F1        COMP 'Z'                  30             
    C           F1        COMP ' '                      31         
    C   30N31             GOTO MOVE$                               
    C                     MOVELFELD24    F1      1                 
    C           F1        COMP 'A'                    30           
    C  N30      F1        COMP 'Z'                  30             
    C           F1        COMP ' '                      31         
    C   30N31             GOTO MOVE$                               
    C                     MOVELFELD23    F1      1                 
    C           F1        COMP 'A'                    30           
    C  N30      F1        COMP 'Z'                  30             
    C           F1        COMP ' '                      31         
    C   30N31             GOTO MOVE$                               
    C                     MOVELFELD22    F1      1                 
    C           F1        COMP 'A'                    30    
    C  N30      F1        COMP 'Z'                  30      
    C           F1        COMP ' '                      31  
    C   30N31             GOTO MOVE$                        
    C                     MOVELFELD21    F1      1          
    C           F1        COMP 'A'                    30    
    C  N30      F1        COMP 'Z'                  30      
    C           F1        COMP ' '                      31  
    C   30N31             GOTO MOVE$                        
    C                     GOTO ENDE                         
    C           MOVE$     TAG                               
    C                     MOVEL'     '   FELD30 30          
    C                     MOVE INPUT     FELD30             
    C                     MOVELFELD30    INPUT  25          
    C           ENDE      TAG                               
    C                     SETON                     LR

    :-)))) wünsche allen noch ein frohes Fest und schöne Feiertage :-)))

  8. #20
    Registriert seit
    May 2004
    Beiträge
    444
    Ich glaube das muss ein Praktiker beantworten :-)

    Wenn ich mir deine Konstante "AlphaChk" anschaue, dann sieht man ja schon was für Zeichen in den ersten 5 Stellen geprüft werden sollen. Um das nicht all zu kryptisch zu machen hätte ich das so gelöst:

    Einfach die einzelnen Zeichen der ersten 5 Stellen prüfen ob sie in deiner Konstante vorhanden sind.

    if %scan(%subst(Feld:1:1):
    AlphaChk) = 0 or %scan(%subst(Feld:2:1):AlphaChk) = 0
    or %scan(%subst(Feld:3:1):AlphaChk) = 0 or %scan(%subst(Feld:4:1):AlphaChk) = 0
    or %scan(%subst(Feld:5:1):AlphaChk) = 0;
    Feld = 'bbbbb' + %trimr(Feld);
    endif;

  9. #21
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Wie immer gibts viele Möglichkeiten. In der Lösung von Hel400 ist nicht berücksichtigt, dass in der EBCDIC-Range zwischen 'A' und 'Z' auch noch ein paar Sonderzeichen liegen.

    Ein %check() liefert die 1. Position des nicht erlaubten Zeichens.
    Also noch simpler:

    if %check('ABCD.......XYZ ':Feld) < 6;
    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. #22
    Registriert seit
    May 2004
    Beiträge
    444
    @Fuechau 1:0 für dich :-) Aber diese Antwort zu Beginn wäre der Hauptgewinn gewesen :-)

  11. #23
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das wäre ja schon mit V5R1 oder früher (CHECK) mit RPGIII schon möglich gewesen.
    Aus der Ursprungsanfrage hatte ich eben noch gemeint ableiten zu müssen, dass die nachfolgenden Stellen auch noch numerisch hätten sein sollen.
    Und da war RegEx die einfachere Wahl. Außerdem ist das ja auch moderner;-).
    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. #24
    Registriert seit
    Dec 2014
    Beiträge
    310
    Zitat Zitat von Fuerchau Beitrag anzeigen
    ...
    In der Lösung von Hel400 ist nicht berücksichtigt, dass in der EBCDIC-Range zwischen 'A' und 'Z' auch noch ein paar Sonderzeichen liegen.
    ...
    :-))) na ernst jetzt?
    Ich dachte nicht, dass dieser Schmarrn tatsächlich "analysiert" wird :-)))

Similar Threads

  1. Sonderzeichen in Alpha-Feld
    By alex61 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 20-09-19, 09:43
  2. CPYTOIMPF Blank beim Export aber Inhalt von Feld = leer
    By TheDevil in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 05-06-14, 22:47
  3. Query/400 Umwandeln von Alpha in Num
    By Michael1 in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 18-08-05, 15:50
  4. SQL-Alpha in Numeric
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 13-10-01, 13:36
  5. Alpha in numeric - SQL/QRY
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 02-10-01, 17:16

Tags for this Thread

Berechtigungen

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