Seite 1 von 2

Ordner nach Text Durchsuchen

Verfasst: 22.05.2009 23:08
von X360 Andy
Da ich Heute mittag einen Ordner mit 100Php nach einem Wort absuchen musste ich aber kein Tool kannte und mir auch Google nicht geholfen hat , hab ich mir kurzer Hand was eigenes geschrieben.

Gerade noch en Beispiel dazu geschrieben ....
Vieleicht kann man es ja gebrauchen oder auch erweitern(auch wenn es nichts besonders ist)

Vieleicht hab ich Ts-Soft auf eine Idee gebracht damit ein Plugin für seinen Commander zu machen?

Was man vieleicht besser hätte machen können
-Unterordner durchsuchen
-Alle ergebnisse auflisten
-Weitersuchen

Code: Alles auswählen

Global Pattern.b
Global Zeile.l
NewList Suche.s()

SuchOrdner$ = PathRequester("Bitte wählen Sie einen Pfad aus", "C:\")
Suchwort$ = InputRequester("Suchwort", "Bitte Suchwort eingeben", "")

Procedure Findwort(SuchOrdner$, SuchWort$, Pattern$ = "", Unterordner = 0)
  Shared Suche(), Anzahl.l
  
  If Not Pattern$
    Pattern$ = "*.*"
  EndIf
  
  If Right(SuchOrdner$, 1)<>"\"
    SuchOrdner$ + "\"
  EndIf
  
  exam = ExamineDirectory(#PB_Any, SuchOrdner$, "*.*")
  If Exam
    While NextDirectoryEntry(exam)
      d$ = DirectoryEntryName(exam)
      If DirectoryEntryType(exam) = #PB_DirectoryEntry_File
        
        Pattern.b = 0
        If Pattern$ = GetExtensionPart(d$)
          Pattern.b = 1
        ElseIf pattern$ = "*.*"
          Pattern.b = 1
        EndIf
        
        If ReadFile(0, SuchOrdner$ + d$) And Pattern.b = 1
          While Eof(0) = 0
            Zeile$ = ReadString(0)
            Zeile.l + 1
            Anfang.l = FindString(Zeile$, Suchwort$, 0)
            If Anfang.l
              Datei$ = d$
              AddElement(Suche())
              Suche() = Suchordner$ + Datei$
              AddElement(Suche())
              Suche() = Str(Zeile.l)
              AddElement(Suche())
              Suche() = Str(Anfang.l)
              Anzahl.l + 1
            EndIf
          Wend
          Zeile.l = 0
          CloseFile(0)
        EndIf
      ElseIf d$<>"." And d$<>".."
        If Unterordner = 1
          Findwort(SuchOrdner$ + d$, SuchWort$, Pattern$)
        EndIf
      EndIf
    Wend
    FinishDirectory(exam)
  EndIf
  
  If Not anzahl.l
    ProcedureReturn 0
  Else
    ProcedureReturn Anzahl.l
  EndIf
  
EndProcedure

Anzahl.l = Findwort(SuchOrdner$, SuchWort$, "", 0)
If Anzahl.l
  Debug "Treffer: " + Str(Anzahl.l)
  Debug ""
  ForEach Suche()
    Debug Suche()
    Nexte + 1
    If nexte = 3
      nexte = 0
      Debug "-----"
    EndIf
  Next
Else
  Debug "Suche Erfolglos"
EndIf

Verfasst: 23.05.2009 00:10
von KeyKon
Kann man nich auch mit der ganz Normalen Windows-Suche den Inhalt von Dateien durchsuchen?

Verfasst: 23.05.2009 00:18
von X360 Andy
KeyKon hat geschrieben:Kann man nich auch mit der ganz Normalen Windows-Suche den Inhalt von Dateien durchsuchen?
Nein diese durchsucht nur die Datei Namen, nicht den Inhalt (Zumindest bei Win7)

EDIT

Oh geht doch .... :cry:
Das ist ein Schlag ins Gesicht ....

Verfasst: 23.05.2009 00:43
von Kaeru Gaman
siehs positiv: du hast dabei sogar zwei Dinge gelernt.
1. wie man's selber macht und
2. dass Windows es von Haus aus kann
Bild

Verfasst: 24.05.2009 18:43
von Andesdaf
Kaeru Gaman hat geschrieben:siehs positiv: du hast dabei sogar zwei Dinge gelernt.
1. wie man's selber macht und
2. dass Windows es von Haus aus kann
Bild
und dass Windows mehr kann als man von ihm erwartet.

Verfasst: 25.05.2009 21:59
von walter741
Hallo

Bei mir durchsucht WinXP nur einige Dateien nach einen Text.
Einige Dateien werden NICHT durchsucht.

Beispiel:
1. In Purebasic einen CodeBaustein mit dem Namen ABCDE12345 erstellen.

2. Mit dem Explorer nach ABCDE12345 innerhalb einer Datei suchen.

Bei mir findet der Explorer nichts, obwohl der Text vorhanden ist.=>Datei öffnen mit Editor und danach suchen.

Oder redet Ihr über eine andere Suchfunktion?

Gruss Walter

Nachtrag:
Der obere Code findet die Textpassage sofort.

Verfasst: 25.05.2009 22:56
von AND51
Wollte den Code optimieren, bin aber bei der Übergabe mehrerer Parameter an einen Thread hängen geblieben.

Der Code weist einige Lücken auf, z. B. werden keine UTF8 und Unicode-Dateien beachtet.

Verfasst: 25.05.2009 23:56
von X360 Andy
AND51 hat geschrieben: Der Code weist einige Lücken auf, z. B. werden keine UTF8 und Unicode-Dateien beachtet.
Geht bei mir beides
Wenn ich die Datei mit dem Editor als UTF8 oder Unicode abspeichere und sie danach Suche (bzw deren Inhalt), wird sie auch gefunden.

@walter741
Ich denke mal das WIN nicht das gesamte System durchsucht (würde ja auch zu lange dauern) sondern nur bekannte Suchpunkte (Desktop etc.)

Verfasst: 26.05.2009 00:43
von KeyKon
AND51 hat geschrieben:Wollte den Code optimieren, bin aber bei der Übergabe mehrerer Parameter an einen Thread hängen geblieben.
-> Struktur

Verfasst: 26.05.2009 01:40
von Kaeru Gaman
> Ich denke mal das WIN nicht das gesamte System durchsucht (würde ja auch zu lange dauern) sondern nur bekannte Suchpunkte (Desktop etc.)

hat damit nix zu tun.
Selbstverständlich benutzt man die Erweiterte Suche.

auch wenn man den richtigen Ordner angibt und den dateinamen mit *.pb,
der olle explorer durchsucht die nicht richtig.

womöglich sagt sich Windos "is keins von meinen textformaten, da is kein Text drin."