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



Antwort per Email an