hier mal wieder eine Frage an die Tempo Profis
Ist diese Lösung hier eher schnell, oder eher langsam und umständlich?
Code: Alles auswählen
PROCEDURE main()
LOCAL string
cls
use \videoneudaten\datenbanken\vo\titel new
copy structure TO titeltest
use titeltest new
DO WHILE ! titel->(eof())
IF titel->(Recno()) %500 == 0
@ 5,1 say titel->(recno())
ENDIF
string := titel->bez
entfernen(@string)
titeltest->(Dbappend())
titeltest->id := titel->id
titeltest->bez := string
titel->(Dbskip())
ENDDO
RETURN
********************************************************************************
FUNCTION entfernen(string)
LOCAL altelaenge := maxline(string)
LOCAL neuelaenge := 0
LOCAL neuerstring := string
LOCAL nI
LOCAL zeichen := ""
LOCAL zeichensatz := "!§$%&/()=?^*+'#<>,;.:-_\{}[] "
LOCAL zeichenSatzLaenge := MAXLINE(zeichensatz)
IF EMPTY(neuerstring)
RETURN(.T.)
ENDIF
IF UPPER(SUBSTR(neuerstring,1,3)) = "DER" .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "DIE" .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "DAS" .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "THE" .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "THA" .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "DE " .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "LE " .OR.;
UPPER(SUBSTR(neuerstring,1,3)) = "LA "
neuerstring := POSDEL(neuerstring,1,3)
ENDIF
FOR nI := 1 TO zeichenSatzlaenge
zeichen := SUBSTR(zeichensatz,nI,1)
IF UPPER(Substr(neuerstring,1,1)) == UPPER(zeichen)
neuerstring := POSDEL(neuerstring,1,1)
nI := 0
IF EMPTY(neuerstring)
EXIT
ENDIF
ENDIF
NEXT
neuelaenge := maxline(neuerstring)
neuerstring += SPACE(altelaenge-neuelaenge)
IF ! EMPTY(neuerstring)
string := neuerstring
ENDIF
RETURN(string)
Sinn und Zweck der Routine soll es sein, einen Index aufzubauen, der Sonderzeichen und Artikel usw. am Anfang nicht berücksichtigt.
Es geht hier nur um die Routine, nicht um die Beachtung, ob der Schlüssel nachher von der Länge her paßt usw. Das ist alles schon fertig.
POSDEL() ist aus den Tools III. Früher waren die komplett in Assembler programmiert und somit sehr schnell. Wie das heute ist, weiß ich nicht.