TurboPL Referenz

StrComp Prozedur

Top  Previous  Next

Syntax

StrComp(Zeichenkette1,Zeichenkette2: String): Real

Kategorie

Basisfunktion

Erklärung

Liefert einen relativen Vergleich zweier Zeichenketten. Das Ergebnis ist 0, wenn die beiden Zeichenketten in nicht einmal einem Zeichen übereinstimmen, und 1, wenn sie absolut identisch sind. In allen anderen Fällen ergibt sich ein Wert dazwischen, der um so höher ist, je mehr Fragmente der einen Zeichenkette in der anderen zu finden sind. Die genaue Formel lautet:

StrComp(S1,S2)  =  2*n/(Length(S1)+Length(S2))

wobei n die Anzahl der gleiche Zeichen (gerichtet von links nach rechts) ist.

String1         String2          gleiche Zeichen  StrComp

---------------------------------------------------------

Hinterhuber     Einmeier               5             0.53

^^ ^    ^^      ^^ ^ ^^

Sindelfingen    Sindlefingen          11             0.92

^^^^ ^^^^^^^    ^^^^^ ^^^^^^

Huberstraße     Albertusstr            6             0.55

^^^^^^          ^^^   ^^^

Die Funktion eignet sich hervorragend dazu, den zu einer Zeichenkette ähnlichsten aus einer Tabelle zu suchen.

Laufzeitfehler

Keine

Beispiel

Die Tabelle KUNDEN wird über den Ortsnamen mit der Tabelle PLZNEU gekoppelt. In einem Subreport wird der ähnlichste Straßennamen gesucht und, falls der Vergleichswert wenigstens 0.8 ergibt, die neue Postleitzahl in das Feld KUNDEN.PLZ übernommen.

.REPORT
.PROLOGUE
.PRIMTABLEIS KUNDEN
.RELATION KUNDEN[Ort]=PLZNEU[Ort]
.SELECTION KUNDEN.Land in ["D","W","O"], Length(KUNDEN.PLZ)<5
..Nur die bislang unbehandelten Postleitzahlen werden bearbeitet
.DATA
.VAR MaxStrComp=0
.VAR PLZhierzu=""
.SUB PLZNEU
.  VAR vgl=StrComp(KUNDEN.Straße,PLZNEU.Straße)
.  IF vgl>MaxStrComp
.    VAR MaxStrComp=vgl
.    VAR PLZhierzu=PLZNEU.PLZ
.  END
.ENDSUB
.IF MaxStrComp>=0.8
$(KUNDEN.Ort:25 KUNDEN.Straße:25 KUNDEN.PLZ:5 " -> " PLZhierzu)
.REPLACE KUNDEN(PLZ=PLZhierzu)
.EPILOGUE

Siehe auch

Text-Funktionen