PDA

View Full Version : chekr in rpg



programmer400
24-06-15, 11:20
Folgendes Problem: Bekomme aus einer angelieferten csv-Datei in einem Feld Titel, Vorname, Nachname geliefert und soll den Nachnamen filtern.

Datenformatbeispiel:
"Mag. vorname nachname "
"vorname nachname "

Wie bekomme ich den Nachnamen in rpg am besten in ein eigenes Feld?

Da ich diese Funktion in einem alten RPGIII Programm einbauen muss, bitte um Info, wie das in RPGIII am besten zu lösen geht.

Danke im Voraus für die Hilfe.

Robi
24-06-15, 11:44
Moin,

Du kannst das Feld als Tabelle definieren und in Schleife von hinten das 1 Feld <> Blank suchen
danach, ebenfals rückwärts, das 1 Blank

Probleme machen dann nur noch:

Hans Dieter Meyer --> Meyer
Magret Möller Schulz --> Möller Schulz

Gruß
Robi

programmer400
24-06-15, 11:51
So eine Lösung wollte ich eben vermeiden. Ich dachte, es geht auch irgendwie mit CHEKR

malzusrex
24-06-15, 11:53
Das ganze bekommst du nur mit "unschärfe" hin. Wenn Titel, Vorname, Nachname immer nur ein Wort sind, dann also Anregung eventuell so:


d Text s 500 Inz( 'Dr.Hugo Müller' )
d Nachname s 50
d
d Index s 10 0
/free
For Index = %Len( %Trim( Text )) downto 1;
If %SubSt( %Trim( Text ): Index : 1) = ' ';
Leave;
EndIf;
EndFor;
Nachname = %SubSt( Text: Index+1: 50-Index);
*InLr = *on;
/end-free

Hat der Nachname zb. ein von oder was in der Art, dann geht es mit dem Beispiel nicht mehr.

Gruß
Ronald

Fuerchau
24-06-15, 13:11
CHEKR oder CHECK erwarten eine Byteliste der gültigen Zeichen.
Du kannst also mühsam eine Tabelle aller Zeichen (Groß/Klein/Umlaute) erstellen, wobei gerade Umlaute und Sonderzeichen CCSID-relevant sind und nicht im Code vorkommen sollten.
Außerdem prüft der Befehl jedes Byte gegen jedes Byte der Tabelle.

Der einfachste Weg ist wirklich eine Schleife und sicherlich auch der schnellste.
Die obige Schleife musst du halt nur nach RPGIII konvertieren.

Ggf. kann man ja per SCAN schon mal den Aufsetzpunkt für das 1. Blank ermitteln.

AG1965_2
24-06-15, 15:44
Ja, Programmieren ist halt doch Arbeit. :-)
Die C-Funktion "strtok" könnte hier etwas helfen, ihr sind die Anzahl der Blanks zwischen Worten egal.
Hier löst der Autor eine sehr ähnliche Aufgabe: http://www.mcpressonline.com/programming/rpg/free-format-using-c-functions-in-rpg-iv.html

Robi
24-06-15, 16:08
Ich will ja nicht meckern, aber ...

Da ich diese Funktion in einem alten RPGIII Programm einbauen muss, bitte um Info, wie das in RPGIII am besten zu lösen geht.


Empfehle programmer400 jedoch die Funktionalität aus zu lagern und einen der Pgm Bsp's zu verwenden
Robi

programmer400
24-06-15, 16:38
Danke für die Tipps, habs mit einer Schleife gelöst.