Autor | Thema: Text-Zeilen durchsuchen | | Datum:25.01.02 16:10 
(info@web-treffpunkt.de) | |
Hallo an Alle
Suche Ratschläge...
Ich möchte mehrere normale Text-Dateien hintereinander nach einem bestimmten Begriff durchsuchen und dann in einer Listbox anzeigen lassen, in welcher Datei der Begriff steht.
Bisher klappt es nur mit der ersten Eingabe der jeweiligen Textzeile. Wie kann ich die Suchfunktion dahingehend erweitern, dass jede Textzeile von Anfang bis Ende durchsucht und der Begriff bei Vorhandensein angezeigt wird ?
mfG
horst
|
| | Datum:25.01.02 17:55 
(joerse@gmx.de) | |
Hallo Horst,
Wenn Du die Textdatei mit reset zum lesen öffnest, kannst Du das Ganze folgendermaßen lösen:
declare Zeile$,Suchtext$
Proc SucheText
Parameters sZeile$,sSuch$
declare Position%,gefunden%
Position%=InStr(sSuch$,sZeile$)
whilenot Position%=0
inc gefunden%
sZeile$=Mid$(sZeile$,Position% + Len(sSuch$),Len(sZeile$) - Position%)'Zeile reduzieren auf Reststring
Position%=InStr(sSuch$,sZeile$)
Wend
return gefunden%
EndProc
cls
Zeile$="Dies ist ein Text der einen Begriff nämlich ein Text zweimal enthält"
Suchtext$="ein Text"
'hier natürlich in einer Schleife die Datei einlesen und für jede Zeile ausführen
SucheText Zeile$,Suchtext$
print "In diesem Satz:"
print Zeile$
Print "kommt <" + Suchtext$ + "> " + str$(@%(0)) + "-mal vor"
WaitInput
Allerdings ist es schwierig Zeilen übergreifende Vorkommen (also mit chr$(13) ) zu finden.
Die Zweite Möglichkeit ist, die Datei mit openrw und blockread einzulesen
und die Bereichsvariable mit mempos zu durchsuchen.
Dann erhälst Du allerdings nicht ohne weiteres die Zeilennummern.
Ich hoffe das hilft Dir weiter
Jörg
|
| | Datum:25.01.02 18:31 
(info@web-treffpunkt.de) | |
Hallo Jörg
Danke für die schnelle Antwort - Die Lösung klappt prima
Im Moment 'müssen' 63 *.txt-Dateien mit jeweils ca. 50 Zeilen durchsucht werden und das funktioniert bestens ;o)
mfG
horst
|
| | Datum: 25.01.02 19:49 
(joerse@gmx.de) | |
Hallo Horst,
Hab' nochmal etwas gegrübelt.
Wenn Du nur die Anzahl der Vorkommen in der Zeile brauchst ohne die Positionen, kannst Du es auch mit zwei Definitionen erledigen.
Dann brauchst Du nur noch eine Programmzeile pro Textzeile:
Def CharCount(2) int(Sub(Len(@$(1)),Len(translate$(@$(1),@$(2),""))))
Def StringCount(2) CharCount(@$(1),@$(2)) / len(@$(2))
print StringCount(Zeile$,Suchtext$)
Gruß
Jörg
|
|
|