Adressdatenbestand mit LIST SYSTEM auf Gültigkeit prüfen

Das Beispiel zeigt, wie in der INVEP-Gläubigerverwaltung der gesamte angezeigte Adressdatenbestand auf gültige Zeichen überprüft werden kann. In diesem Beispiel wird eine Vielzahl von OBAS-Funktionen verwendet. Jedoch auch hier ist die LIST SYSTEM$-
Funktion interessant, da mit ihr diesmal Adressdaten direkt aus der Datenbank ausgelesen werden.

! GlbCheckAdrValid . obas (c) Andre Koppel Software 2013
! Das Programm liest die Liste aller angezeigten Gläubiger, die gerade in der Gläubigerverwaltung
! angezeigt werden aus und prüft, ob in den Adressen ungültige Zeichen enthalten sind .
DIMOPTION ON ! bereits vorhandene Variablen überschreiben
DIMOPTIONBASE 1 ! Unsere Basis für Vektoren ist 1
DEF POOL 1000000 ! Wir brauchen wohl min. so viel Speicher
INIT VARSPACE ! wir löschen alle Variablen
DIM Matrix(3 ; 3) ; Abmessung(2)
COM InvalidCnt
DISPLAY IS MESSAGE WINDOW
CLRSCR
TRACE TO SCREEN
IsAccent=0
InvalidCnt=0
! WidgetName$=WIDMXGETACTIVE$
! Wir verwenden das Widget der Liste in der Gläubigerverwaltung
WidgetName$="DLG018_Dliste"
! In der zweiten Spalte stehen die Datensatzreferenzen auf die Adressen , diese lesen
! wir mit WIDMXREAD aus .
MAT Matrix=WIDMXREAD WidgetName$ ; "2"
! Der Anwender soll entscheiden , ob Accente zulässig sind
r$= CHOICE$ ("Accente zulässig ?" ; "{ Ja; Nein }" ; "{1}" ; 0)
IsAccent = IVAL (r$)
IF IsAccent<>1 THEN IsAccent =0 ELSE IsAccent =5
! Mit GETDIM fragen wir die Anzahl der Ergebniszeilen ab.
MAT Abmessung=GETDIM Matrix
Rows=Abmessung (2)
! jetzt verarbeiten wir alle Datensätze in einer Schleife
FOR y=1 TO Rows
  v=Matrix(y)
  CheckAdr v ; IsAccent
NEXT
IF InvalidCnt THEN
  DISP "Problemfälle : " InvalidCnt "\n"
ELSE
  DISP " keine Problemfälle gefunden\n"
END IF
TERMINAL
! Die Prüfprozedur überprüft sämtliche Anzeigekomponenten
! und benennt im Fehlerfalle die Teile, die ungültige Zeichen enthalten
PROCEDURE CheckAdr Snr ; IsAccent
DIM Entry$ [4000]; Invalid$ [1000]; Pruef$ [4096]; Valid$ [256]
! Wir verwenden die LIST SYSTEM Funktion zum Auslesen der Adressen.
! Die Referenznummer haben wir aus der Matrix ausgelesen und als
! Parameter bekommen.
Entry$=LIST SYSTEM$("adr :"& VAL$(Snr))
Invalid$=""
Valid$=VALID ASCII$(2)&VALID ASCII$(3)&VALID ASCII$(4)
IF IsAccent THEN Valid$=Valid$&VALID ASCII$(IsAccent)
NElements=LIST LEN(Entry$)
FOR OLoop=1 TO NElements
  Pruef$=LIST GET$(Entry$ ; OLoop)
  IsErr=STRSPN(Pruef$ ; Valid$)
  IF IsErr THEN
    ! Wenn noch keine Ausgabe erfolgte , so geben wir zuerst
    ! die Datensatznuummer der Adresse aus .
    IF NOT SLEN(Invalid$) THEN Invalid$="#"&VAL$(-Snr)&": "
    Invalid$=Invalid$&LIST GET NAME$(Entry$ ; OLoop)
    Invalid$=Invalid$&"("&VAL$(IsErr )&") "
    END IF
  NEXT
IF SLEN(Invalid$) THEN
  DISP Invalid$ "\n"
  InvalidCnt=InvalidCnt+1
END IF
END PROCEDURE

Wie Sie sehen können, handelt es sich tatsächlich um ein extrem kurzes Programm,das jedoch einen sehr großen Funktionsumfang hat, denn ein gesamter Datenbestand wird auf Gültigkeit geprüft, und alle Datensätze, die potentielle Probleme verursachen könnten werden inklusive der Position, an der das Problem entdeckt wurde, ausgegeben. Wenn man die Kommentarzeilen nicht einrechnet, so ist das Programm gerade einmal 49 Zeilen lang, und dabei könnte es ohne weiteres noch zusammen gekürzt werden.



Schatten