-
Hab das jetzt mal so umgesetzt, aber die
BLANKS bekomme ich dadurch nicht raus.
Werden die BLANKS nicht erkannt bei CHECK?
Ich könnte jetzt noch die Blanks mit %SCAN rausfiltern oder gibts da noch ne möglichkeit?
Danke auf jedenfall schon mal für den Weg hierhin!!!  
-
hallo nochmal,
also beim OpCode bemängelt der CHECK auch blanks und gibt einen entsprechenden Returncode. Bei der BIF-Funktion bin ich mir nicht ganz sicher, da ich diese noch nie benutzt habe (wegen zu niedrigen Versionsstand). Es müsste aber doch eigentlich analog zum OpCode funktionieren.
Ich teste das mal auf unserer Produktionsmaschine, die unter V5 läuft. Habe ich aber erst morgen Zeit für übrig (wegen Feierabend).
Bis dann
Ulli
-
Ich würde mir das doch sehr einfach machen:
d MyNum 18p 0
d MyChar 18
d MyInd 5I 0
d MyDig 1
MyNum=*zero;
for MyInd=1 to %size(MyChar);
MyDig = %subst(MyChar:MyInd:1);
if %check('0123456789':myDig)=*zero;
MyNum = MyNum*10+%dec(MyDig:1:0);
endif;
next;
Nicht nur negativ denken, sondern positiv (also eher auf gültig als ungültig prüfen).
-
Perfektes Beispiel
Gutes Beispiel, womit dann auch bewiesen wäre, dass %CHECK auch mit blanks funktioniert.
Statt %size(MyChar) würde ich allerdings eher %len(%trimr(MyChar)) verwenden, um die Schleife zu optimieren. 
ulli
-
Die Performance ist da eher vernachlässigbar, da bei deiner Methode die Variable erst mal temporär in varsize umkopiert wird, die restlichen Leerzeichen entfernt werden, dann die länge berechnet und anschließend die Variable wieder verworfen wird.
Ausserdem werden die linksstehenden Leerzeichen ja trotzdem bearbeitet.
%size wird bereits zur Compile-Zeit ausgelöst.
Für die Performance-Freaks:
d MyDS DS
d MyNum 18p 0
d MyChar 18
d MyInd 5I 0
d MyDig 1
d MyZDig 1 0 overlay(MyDig)
:
MyNum = MyNum*10+MyZDig;
:
-
Hallo,
Wenn's um die Performance geht, würde ich zunächst entweder die Built-in-Funktion %INT oder %DEC verwenden um die alphanumerische Nr. zu konvertieren. Sollten in dem String ungültige Zeichen vorhanden sein, erfolgt ein Abbruch. Diesen kann man über eine Monitor-Group abfangen werden. Anstatt im Fehlerfall jedes Zeichen einzeln zu prüfen, würde ich direkt nach den ungültigen Zeichen suchen und diese aus dem String entfernen.
PHP-Code:
D Digits C const('1234567890 ')
D Pos S 3U 0
*************************************************************
/Free
Monitor;
Clear MyNum;
If MyAlpha <> *Blanks;
MyNum = %Int(MyAlpha);
EndIf;
On-Error;
DoU Pos = *Zeros;
Pos = %Check(Digits: MyAlpha);
If Pos <> *Zeros;
MyAlpha = %Replace('': MyAlpha: Pos: 1); //Entfernen ungült. Zeichen
EndIf;
EndDo;
MyNum = %Int(MyAlpha);
EndMon;
/End-Free
Birgitta
-
Falls das Ergebnis alphanumerisc sein soll, dann eine kleine Abwandlung von Baldurs ausgezeichneter Lösung:
d MyNum 18
d MyChar 18
d MyInd 5I 0
d MyDig 1
MyNum = *blanks;
for MyInd =1 to %size(MyChar);
MyDig = %subst(MyChar:MyInd:1);
if %check('0123456789':myDig) = *zero;
MyNum = %trim(MyNum) + MyDig;
endif;
next;
-
Wie immer, gibt es viele Varianten, ob es tatsächlich messbare Unterschiede gibt, k.A., aber wenn in 99,9% aller Fälle Sonderzeichen in der Nummer vorhanden sind, ist der erste Test eben meistens bereits unnötig.
Auch was die Umwandlung nach CHAR angeht, so ist Ludgers Lösung nicht ganz so gut , besser wäre am Ende:
a) MyChar = %char(MyNum); // Linksbündig ohne Vornullen
b) MyChar = %editc(MyNum:'X'); // Mit vornullen
Somit entfällt das ständige trimmen und catten.
Similar Threads
-
By robertki in forum NEWSboard Programmierung
Antworten: 25
Letzter Beitrag: 19-01-07, 08:42
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By jth in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 21-12-06, 11:13
-
By Alex79 in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 28-07-05, 15:45
-
By hs in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 09-10-01, 12:06
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