fb:porticula NoPaste
String nach mehreren Begriffen durchsuchen
Uploader: | nemored |
Datum/Zeit: | 30.07.2014 13:12:22 |
' Die Funktion durchsucht einen String auf mehrere Suchbegriffe (UND oder ODER) und liefert die erste Fundstelle
' zurueck, bzw. 0, wenn kein Begriff (ODER-Suche) oder nicht alle Begriffe (UND-Suche) gefunden wurde(n).
function such(text as string, suchbegriff() as string, undOder as integer = 0) as integer
' text: zu durchsuchender Text
' suchbegriff(): zu suchende Begriffe
' undOder: 0: mind. ein Begriff muss vorkommen; <>0: alle Begriffe muessen vorkommen
dim as integer position(lbound(suchbegriff) to ubound(suchbegriff)), fund(lbound(suchbegriff) to ubound(suchbegriff))
dim as integer ersteFundstelle
for textPos as integer = 0 to len(text)-1
for begriff as integer = lbound(suchbegriff) to ubound(suchbegriff)
' Begriff gefunden - naechster Suchbegriff
if position(begriff) = len(suchbegriff(begriff)) then continue for
' Korrektes Suchzeichen?
if text[textPos] = suchbegriff(begriff)[position(begriff)] then
' gefunden; auf naechstes Zeichen wechseln
position(begriff) += 1
if position(begriff) = len(suchbegriff(begriff)) andalso ersteFundstelle = 0 then
ersteFundstelle = textPos - len(suchbegriff(begriff)) + 2
' wenn ODER-Suche, dann Funktion verlassen
if undOder = 0 then return textPos - len(suchbegriff(begriff)) + 2
end if
else
' nicht gefunden; auf Anfang des Suchbegriffs zuruecksetzen
position(begriff) = 0
end if
next
next
' UND-Suche: alle Begriffe gefunden?
if undOder then
for begriff as integer = lbound(suchbegriff) to ubound(suchbegriff)
if position(begriff) < len(suchbegriff(begriff)) then return 0
next
' alle Begriffe gefunden
return ersteFundstelle
else
' keinen Begriff gefunden
return 0
end if
end function
'########################
' Anwendungsbeispiel
dim as string zahl(2 to 5)
zahl(2) = "zwei"
zahl(3) = "drei"
zahl(4) = "vier"
zahl(5) = "fuenf"
print such("sieben fuenf dreiundvierzig zweiundachtzig", zahl(), 1)