Schnelle Volltextsuche in Textdateien?

  • VB6

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Schnelle Volltextsuche in Textdateien?

    Hallo ,



    ich möchte den Inhalt von ca. 2000 Textdateien nach Wörtern durchsuchen.

    Mit dem FileSystemObject und dem Einlesen als Textstream und Suchen mit InStr(..) brauche ich für 2000 Dateien 3 Minuten.

    Hat jemand eine Idee, wie man das mit VB (kein NET) schneller hinbekommt?



    Danke,

    Claus
    verstehe dein posting nicht ganz:

    - instr verwende ich ja,

    - Mid brauche ich nicht

    - was bedeutet 'NEW EDIT' ?

    - der link hat auch wenig mit meiner frage zu tun

    und ' lass dir eigenes such algorithmus einfallen ' ist auch wenig hilfreich.



    machmal hat man das gefühl, dass nur geantwortet wird, um irgendwas zu antworten, oder um sternchen zu bekommen.



    das problem ist, dass in eine frage, die schon eine antwort hat, nicht mehr so viele leute reinschauen, um einen hilfreichen hinweis zu geben.

    aber trotzdem thnx.

    clm123 schrieb:

    dass in eine frage, die schon eine antwort hat, nicht mehr so viele leute reinschauen

    Meist ist allerdings eher umgekehrt ;)
    (nur wirds im Lauf der Zeit immer weniger "hilfreich")

    Musst du nur herausfinden, OB "xy" vorkommt, oder auch wo und wie oft?
    Von welchen Dateigrößen sprechen wir? Wie hoch ist die Wahrscheinlichkeit, dass es vorkommt, bzw wie oft im Schnitt kommt es in einer Datei vor?
    ja, das ist doch ein posting mit substanz..



    zu deinen Fragen:

    - ich muss nur rausfinden, ob es vorkommt

    - datei größe ca. 500 KB

    - Wie hoch ist die Wahrscheinlichkeit, dass es vorkommt: eher gering, weiß ich aber nicht genau.



    Danke für einen Tipp

    Habe mir schon nach FileSearch und Volltextsuche etc. die finger wundgegoogelt.

    Kann man irgendwie den windows-Suchdienst benutzen oder gib es vielleicht ein ActiveX/OCX-Teil dafür?
    Tja mit vb.net wäre es ein Einzeiler ;)
    My.Computer.Filesystem.FindInFiles
    das ist praktisch dasselbe, was du ansonsten über die Suchfunktion von windows machst, wenn du da nach Dateiinhalten suchst. Ob das jetzt langsamer oder schneller ist ... me not know ;)

    Lass in deiner Schleife zum Testen erstmal das prüfen mit Instr() weg. Also einfach nur x tausend files einlesen und nix machen. Dann hast du schon mal nen Vergleich, wie lange das reine Instr() braucht und in welche Richtung du optimieren musst.

    clm123 schrieb:

    Muss wohl doch noch .NET lernen

    Ich versprech dir: Es lohnt sich!

    Ich hab auch lange mit VB6 gearbeitet und immer gezögert auf .Net umzusteigen. Aber .Net ist einfach soviele Generationen weiter, dass viele Sachen nicht nur "einfacher" sind (enthält viele Sachen, die man in VB6 halt mit eigenem Code erst machen muss) sondern auch vor allem viel "eleganter" sind.
    Bsp:
    [VB 2008] Strings zählen
    Mach das mal in VB6 ...
    Vorkommen von Strings in Text schnell zählen
    Wörter in Text zählen
    weiter kanst hier suchen, gibs mehr davon...


    von clm123
    ich möchte den Inhalt von ca. 2000 Textdateien nach Wörtern durchsuchen.
    irgend wie komme ich nicht so ganz klar was du willst, habe dir ein Link gepostet hats nicht gepast. Jetzt redest du von String zählen, weist du schon was du überhaupt willst. Beschreibe dein Problem etwas deutlicher und etwas genauer.

    Willst du SUCHEN oder ZÄHLEN ?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Alex2000“ ()

    ok, alex, letztes posting dazu:

    ich habe nichts von 'strings zählen' gesagt.

    mein problem war: wie finde ich unter 2000 Textdateien diejenigen, die einen bestimmten String enthalten. Wo der String in der Datei vorkommt und wie oft, ist mir egal. Alle deine Links haben mit diesem Problem nichts zu tun.

    clm123 schrieb:

    Alle deine Links haben mit diesem Problem nichts zu tun.

    Zu Alex Ehrenrettung: In einem der Links ist zumindest ein Hinweis auf die möglichen Vorteile von InstrB statt Instr. Wäre auch mein nächster hinweis gewesen.

    Der nächste Optimierungsschritt (so man in VB6 bleiben möge), wäre ggfs, nicht jedesmal gleich die komplette Datei einzulesen, sondern immer in zwei Hälften. Also x/2 bytes einlesen, prüfen und nur wenn String nicht gefunden, dann die letzten einlesen. Denn wenn die Strings annähernd zufällig verteilt sind, würde man ja in der Hälfte der Fälle den String schon in der ersten Häfte finden. Man spart also ca. 25% an Daten die nicht eingelesen werden müssen. Müsste man nur prüfen, ob's nen Performance-Vorteil bringt.