[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    111

    Steuerzeichen aus einem CHAR-Feld entfernen

    Hallo zusammen,

    gibt es eine einfache Möglichkeit alle ASCII Steuerzeichen / nicht druckbare Zeichen aus einem String zu entfernen?

    Hintergrund - es kann wohl mal vorkommen, das via Zeichen aus Excel in die DB2 geschrieben werden, die nicht gewünscht sind.

    Folgender Text steht in der Datenbank - dieser soll durch *BLANK ersetzt werden:
    Click image for larger version. 

Name:	Text RPG.png 
Views:	16 
Size:	2,0 KB 
ID:	579

    Wie finde ich überhaupt raus, um welches Zeichen es sich handelt?

    Viele Grüße
    Bratmaxxe

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    Stichwort altes RPG
    F in Stelle 53 der Headerkarte = Filetranslation

    dann , am Pgm ende
    ** INPUT
    XXYYxxyyXxYy... xx = der alte, yy der neue hex wert also z.b. 004001400240 ...


    Code:
          H             .D                     F                               EGHEXR  
          F* ---------------------------------------------------------------------- *  
          F* HEXWERTE AUS Datei RAUS                                             
          F* ---------------------------------------------------------------------- *  
          FINPUT   IP  F     999            DISK                                       
          FOUTPUT  O   F     999            DISK                      A     
    
          IINPUT   KF  01                                    
          I                                        1 250 S1  
          I                                      251 500 S2  
          I                                      501 750 S3  
          I                                      751 987 S4  
          OOUTPUT  DADD     01                               
          O                         S1       262             
          O                         S2       512             
          O                         S3       762             
          O                         S4       999             
    **                                                                      
    INPUT   00400140024003400440054006400740084009400A400B400C400D400E400F40
    INPUT   10401140124013401440154016401740184019401A401B401C401D401E401F40
    INPUT   20402140224023402440254026402740284029402A402B402C402D402E402F40
    INPUT   30403140324033403440354036403740384039403A403B403C403D403E403F40
    INPUT   4140424043404440454046404740484049404C40                        
    INPUT   5140524053405440554056405740584059405E40                        
    INPUT   624063406440654066406740684069406E40                            
    INPUT   704071407240734074407540764077407840                            
    INPUT   80408A408B408C408D408E408F40                                    
    INPUT   90409A409B409C409D409E409F40                                    
    INPUT   A040AA40AB40AC40AD40AE40AF40                                    
    INPUT   B040B140B240B340B440B540B640B740B840B940BA40BB40BC40BD40BE40BF40
    INPUT   CA40CB40CC40CD40CE40CF40     
    INPUT   DA40DB40DC40DD40DE40DF40     
    INPUT   E140EA40EB40EC40ED40EE40EF40 
    INPUT   FA40FB40FC40FD40FE40FF40
    das ist RPG

    Viel spass beim ILE / /Free umbau

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    May 2002
    Beiträge
    1.121
    Jetzt mal soauf die Schnell und ungetestet
    PHP-Code:
    **FREE

      ctl
    -opt  dftactgrp(*nomain(main);

      
    dcl-proc main;
         
    dcl-s Text   char(500) ;
           
    Text   ClearStringText   );
      
    end-proc;


      
    dcl-proc ClearString ;
        
    dcl-pi *N  char500 );
          
    $String char500 );
        
    end-pi;

        
    dcl-s Laenge  int(10);
        
    dcl-s Index   int(10);
        
    dcl-s Zeichen char(1);

        for 
    Index 1 to %len$String );
          
    Zeichen = %SubSt$StringIndex1);
          If  
    Zeichen  x'40';
            %
    SubSt$String Index1) = ' ';
          endif;
        endfor;

        return 
    $String;
      
    end-proc
    Sollte alles was keiner BLANK ist, eben durch ein Blank ersetzen.

    Gruß
    Ronald

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    %xlate ist Dein Freund.

    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. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Geht auch mit SQL und TRANSLATE(Feld, '', x'000102030405...')
    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. #6
    Registriert seit
    May 2007
    Beiträge
    295
    Nur der Vollständigkeit halber: %SCANRPL oder SQL REPLACE könnte hier auch funktionieren.
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    Alle genannten Möglichkeiten kenne ich natürlich auch.
    'mein' Pgm hat den Vorteil, das es JEDE beliebige Datei, die aus Excel, TXT oder was auch immer, bereinigt.
    ovrdbf input, ovrdbf output call fertig!
    zu beachten, das ich eine Verschiebung von input zu output habe, da dieses Bsp ursprünglich für Sourcen gedacht war.
    Wer also nicht immer für jede PC-Datei individuell die HEX-Müll entfernung codieren will ist damit gut bedient!
    In diesem Sinne ...
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  8. #8
    Registriert seit
    Jan 2006
    Beiträge
    111
    Vielen Dank für Eure Hilfen - you saved my day !

    VG
    Bratmaxxe

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Nachdem jetzt jeder seinen Senf dazugegeben hat, darf ich auch noch!
    Wie wär's denn mit SQL und Regular Expressions?

    Code:
    Select RegexP_Replace(Text, '[\W+]', '  ')
      from YourTable;
    Birgitta
    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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    @Robi: Das funktioniert i.d.R. nur bei CPYFRMSTMF, da ich dann nur 1 Feld habe.
    Bei CPYFRMIMPF muss ich da sowieso auf Feldebene arbeiten, da ist SQL dann einfacher.

    @Birgitta:
    In eckige Klammern braucht man nur Aufzählungen '[A-Za-z]' stellen, also '\W+' reicht da bereits.
    Zu bedenken dabei ist: Alle Sonderzeichen "!§$%-_()..." fliegen dabei auch raus.
    w = [A-Za-z0-9ÄÖÜäöüéáí....], also alle Buchstaben und Zahlen
    W = Nicht w
    Besser wäre da die Klasse [:cntrl:], also
    Select RegexP_Replace(Text, '[:cntrl:]+', ' ') from yourtable

    Zusätzlich muss RegEx auch noch als Systemoption installiert werden, was auf Kundensystemen häufiger nicht gemacht bzw. vergessen wird.
    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

  11. #11
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    @Baldur.
    nö, genau das NICHT!

    Ich verwende eine intern beschriebene Datei
    Satz = String
    könnte mann im ILE mit einem Feld machen Rpg konnte nur 256 Stellen
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Und was machst du bei gepackten Feldern die gerne ebensolche Codes enthalten könnten?
    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

Similar Threads

  1. HTML-Code per SQL aus DB-Feld entfernen
    By schwatzen in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 18-01-17, 14:43
  2. Zeitstempel mit CHAR-Feld vergleichen
    By harbir in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 03:29
  3. Umformatierung von einem Textfeld in eine Datum Feld
    By PFR in forum NEWSboard Programmierung
    Antworten: 17
    Letzter Beitrag: 10-06-14, 09:40
  4. Antworten: 2
    Letzter Beitrag: 02-05-14, 09:42
  5. Char-Feld 4-stellig, per SQL nur 1. Stelle ändern
    By LGALF in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 05-07-01, 18:09

Berechtigungen

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