-
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
-
 Zitat von tmg
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
-
 Zitat von BenderD
... wie wärs mit SQL?
update mytable set myfield = replace(myfield, '.', '')
D*B
ich bin begeistert, vielen Dank!!!
-
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.
-
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
-
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 = DelNoNum( MyFld )
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( %SubSt( String : Index : 1) :
c Zahlen )
c = *Zeros
c If Index = 1
c Eval String = %SubSt( String : 2 : 14 )
c Else
c Eval String = %SubSt( String :
c 1 :
c Index - 1 ) +
c %SubSt( String :
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
-
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
-
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.
-
Nunja, wer's compliziert mag...
Ich finde die SQL-Lösung am Einfachsten, die funktioneirt auch mit anderen Ersatzwerten (incl. auch Verlängern).
-
 Zitat von Fuerchau
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
-
Tja, V5R3 ist nun schon so alt ...
-
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
-
By Bobou in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 16-01-07, 10:26
-
By Der_Unwissende in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 14-09-06, 09:35
-
By heini in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 27-06-06, 11:34
-
By dino in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 22-05-06, 18:59
-
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
-
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