Hallo allerseits,
Ich hab da ein Problem bei dem ich nicht so recht verstehe warum es so ist
wie es ist.
Ich hab einen Ordner in dem einige hundert Files liegen die ich gerne
durchsuchen möchte. Die Files sind Logs von einer Maschine mit einem, ich
sag mal, relativ kryptischen Code, however. Ich lasse den User mittels
SelectFolder der Ordner auswählen und öffne dann nach und nach jede Datei.
Dabei lese ich erstmal eine Datei komplett ein, formatiere mir dann den Text
um mittels Split-Funktion und dann suche ich mittels InStr() nach meinem
gewünschten Suchtext, der in einem Editfield steht. Hab ich den ganzen Text
durchsucht wird die Datei geschlossen und die nächste wird aufgemacht.
Gefundene Treffer werden in ein Multiline-Editfield geschrieben.
Unter MacOS X funktioniert das alles prima, unter Windows jedoch
funktioniert das nur prima, wenn es relativ wenig Treffer gibt, bei vielen
Treffern (mehr als 1000, ein genauen Wert weiß ich nicht) führt dazu, dass
sich das Programm weghängt. Ich schreibe das Program unter MacOS, kann unter
Windows lediglich Testen ob und wie toll das Programm funktioniert. Warum
das Programm allerdings so harkt weis ich nicht. Unter Windows fällt auch
auf, dass er scheinbar ständig das Fenster komplett neu zeichnet...warum
auch immer. Ich dachte erst, es läge am App.DoEvents. Wenn ich aber das raus
mache dann ändert sich am Verhalten nix großartig, die Progressbar und so
wird halt nicht aktualisiert, man sieht halt nicht wie weit er schon ist,
der Rest bleibt aber, vor allem dass er sich bei vielen Treffern weghängt.
Vielleicht fällt hier jemanden auf, wo der Wurm sich versteckt. Ich hab
jetzt schon einige Tage nix mehr mit RB gemacht und im Moment steh ich
ziemlich auf dem Schlauch. Hier der "Problem"-Code:
Dim folder, file As FolderItem
Dim text As TextInputStream
Dim i, j, match, files As Integer
Dim result(-1) As String
Dim delimiter, lastfile As String
files=0
delimiter = " "
StaticText1(2).Text="0"
EditField1(1).Text=""
folder=GetFolderItem(StaticText1(0).Text)
If folder <> NIL Then
ProgressBar1.Maximum=folder.Count-1
For i=1 to folder.Count-1
ProgressBar1.Value=i
file=folder.Item(i)
text=file.OpenAsTextFile
If text <> NIL Then
Do
result=Split(text.ReadLine(Encodings.WindowsANSI), "8 x leer ")
For j = 0 To UBound(result)
If InStr(result(j), EditField1(0).Text)>0 Then
EditField1(1).StyledText.Text=EditField1(1).Text+Mid(folder.Item(i).Name,0,7
)+" "+Mid(result(j),0,InStr(result(j), " "))+EndOfLine
If StrComp(Mid(folder.Item(i).Name,0,7),lastfile,0)<>0 Then
files=files+1
End If
match=match+1
lastfile=Mid(folder.Item(i).Name,0,7)
If files <> 1 then
StaticText1(2).Text=Str(match)+" in "+ Str(files)+" Files."
Else
StaticText1(2).Text=Str(match)+" in "+ Str(files)+" File."
End If
End If
Next
Redim result(-1)
Loop Until text.EOF
text.close
App.DoEvents 1
End If
Next
End If
PS: Ich verwende RB 5.5.3 und hab auch RB 2009 R4. Bei beiden das gleiche
Problem.
Grüße Michael