Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249219 (10655)
  Suchen
 Zurück zur Übersicht
 AutorThema: Text-Zeilen durchsuchen
Horst Horn
Datum:25.01.02 16:10 Antwortenals Email verschicken (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


Jörg Sellmeyer
Datum:25.01.02 17:55 Antwortenals Email verschicken (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


Horst Horn
Datum:25.01.02 18:31 Antwortenals Email verschicken (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


Jörg Sellmeyer
Datum: 25.01.02 19:49 Antwortenals Email verschicken (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


 Zurück zur Übersicht