-
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:
Wie finde ich überhaupt raus, um welches Zeichen es sich handelt?
Viele Grüße
Bratmaxxe
-
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!)
-
Jetzt mal soauf die Schnell und ungetestet
PHP-Code:
**FREE
ctl-opt dftactgrp(*no) main(main);
dcl-proc main;
dcl-s Text char(500) ;
Text = ClearString( Text );
end-proc;
dcl-proc ClearString ;
dcl-pi *N char( 500 );
$String char( 500 );
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( $String: Index: 1);
If Zeichen < x'40';
%SubSt( $String : Index: 1) = ' ';
endif;
endfor;
return $String;
end-proc;
Sollte alles was keiner BLANK ist, eben durch ein Blank ersetzen.
Gruß
Ronald
-
%xlate ist Dein Freund.
D*B
-
Geht auch mit SQL und TRANSLATE(Feld, '', x'000102030405...')
-
Nur der Vollständigkeit halber: %SCANRPL oder SQL REPLACE könnte hier auch funktionieren.
-
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!)
-
Vielen Dank für Eure Hilfen - you saved my day !
VG
Bratmaxxe
-
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
-
@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.
-
@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!)
-
Und was machst du bei gepackten Feldern die gerne ebensolche Codes enthalten könnten?
Similar Threads
-
By schwatzen in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 18-01-17, 13:43
-
By harbir in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 29-10-14, 02:29
-
By PFR in forum NEWSboard Programmierung
Antworten: 17
Letzter Beitrag: 10-06-14, 08:40
-
By hartmuth in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 02-05-14, 08:42
-
By LGALF in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 05-07-01, 17:09
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks