GELÖST Textsuche mit VB 08 Express

Diskutiere Textsuche mit VB 08 Express im Programmierung Forum im Bereich Software Forum; Hallo, ich schreibe zur Zeit an einem Programm mit einer Text Suchfunktion. Beim Start wird eine bestimmte Text Datei geladen und in einer TextBox...
A

AntiSchuppen

Threadstarter
Mitglied seit
23.07.2006
Beiträge
104
Hallo,
ich schreibe zur Zeit an einem Programm mit einer Text Suchfunktion.
Beim Start wird eine bestimmte Text Datei geladen und in einer TextBox angezeigt.
Jetzt versuche ich eine Suche zu bauen die den eingegebenen Text in der TextBox sucht und am liebsten noch beim tippen im Suchfeld die Treffer anzeigt. Oder zumindest beim Klick auf nen Knopf.

Folgender Code kommt schon nahe ran aber eben nicht so ganz.

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim pfad As String = "d:\1.txt"
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(pfad)
        Dim zeile As Integer
        Dim Gelesene As String
        Do While sr.Peek >= 0
            Gelesene = sr.ReadLine()
                If zeile = zeile Then
                If Gelesene.Contains(TextBox1.Text) Then
                    TextBox2.Text = Gelesene
                    zeile = zeile + 1
                End If
            End If
        Loop
        sr.Close()
    End Sub
Es wird die 1.txt eingelesen und nach dem durchsucht was in der TextBox1 steht.
Dann wird die gesamte Zeile in der das Suchwort steht in die TextBox2 geschrieben.

Wie kann man es anstellen das nicht nur die eine Zeile sondern der ganze Absatz, also 2 Zeilen vor dem Treffer und z.B. 5 Zeilen danach mit angezeigt werden?
Oder eben noch besser, so wie oben beschrieben, wie es jede gewöhnliche Text Suche macht und gleich an die Stelle im Text springt wo das Suchwort steht.

Ich hoffe das ist nicht zuviel verlangt und das Ziel ist zu erkennen. Alleine komme ich aber momentan nicht weiter. Danke schonmal!
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
LOL...was hast du dir den bei dem hier gedacht.
Code:
If zeile = zeile Then
:D

OK, also ich würde vorschlagen den Ladevorgang der Datei vom Suchvorgang zu trennen. Du willst die Datei ja nur einmal in das Textfeld laden und dann mit der Textbox arbeiten.

Aus deiner Beschreibung kann ich nicht genau erkennen was du eigentlich willst. Aber ich habe mal einen Beispielcode geschrieben, wie man sowas machen könnte. Ich habe auf eine Form die Textfeld txtSuche und txtSuchText und den Button btnSuche geknallt.

txtSuche = Enthält den zu suchenden Text
txtSuchText = Enthät den geladenen Text der durchsucht werden soll
btnSuche = Startet die Suche bzw. sucht bei erneutem Klick die nächste Fundstelle

Den Code habe ich in das Click-Event des Buttons geschrieben. Die gefundene Stelle wird einfach im Textfeld hervorgehoben. Wurde die letzte Stelle erreicht, wird wieder von Vorne begonnen.

Damit das funktioniert muss natürlich die Eigenschaft HideSelection des zu durchsuchenden Textfeldes auf FALSE gestellt, werden, sonst wird zwar ausgewählt, aber man sieht die Markierung nicht.

Code:
Private Sub btnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuche.Click
    Static Dim iCurIndex As Integer = 0

    'Suche nächste Fundstelle
    iCurIndex = txtSuchText.Text.IndexOf(txtSuche.Text, iCurIndex, StringComparison.CurrentCultureIgnoreCase)

    'Wenn nicht gefunden, dann nochmal von Vorne beginnen
    If iCurIndex = -1 Then iCurIndex = txtSuchText.Text.IndexOf(txtSuche.Text, 0, StringComparison.CurrentCultureIgnoreCase)

    'Wenn nichts gefunden wurde, dann ist iCurIndex -1.
    If iCurIndex = -1 Then
      MessageBox.Show("Text nicht gefunden!")
    Else
      'Markiere das gefundene Wort
      txtSuchText.SelectionStart = iCurIndex
      txtSuchText.SelectionLength = txtSuche.Text.Length
      iCurIndex += txtSuche.Text.Length
    End If
  End Sub
 
A

AntiSchuppen

Threadstarter
Mitglied seit
23.07.2006
Beiträge
104
Danke für deine Mühe!
Bin halt noch blutiger Anfänger aber ich arbeite dran :)
Mal sehn wie weit ich jetzt komme.
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Kein Problem... ;)

Wenn du noch recht unerfahren bist, dann kopiere aber den Code nicht nur einfach sondern schau ihn dir auch genau an. Es ist wichtig, dass du meinen Code auch nachvollziehen kannst, deshalb habe ich ihn auch entsprechend kommentiert. (Sollte dennoch etwas unklar sein, dann frag' bitte nach.) :blush
 
A

AntiSchuppen

Threadstarter
Mitglied seit
23.07.2006
Beiträge
104
Ich brauch doch nochmal Hilfe.
Die Suche funktioniert nicht so richtig.
Aus der Zeile iCurIndex = txtSuche.Text.Length
hab ich das + entfernt.

Es wird nicht markiert was gesucht wurde, sondern anderes. Auch gern mal über mehrere Zeilen.
Außerdem wird nur weiter gesucht, wenn der zuvor markierte Text wieder "demarkiert" wird. Also wenn man die Markierung durch nen Klick in die TextBox entfernt.
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Hmmm...seltsam. Also ich habe den Code zwar nur kurz getestet, aber er hat einwandfrei funktioniert. :confused

iCurIndex += txtSuche.Text.Length erhöt den letzten Indexwert um die Länge des gesuchten Textes, damit die nächste Suche hinter dem zuletzt gefunden Wort anfängt.
(Es ist die Kurzform von iCurIndex = iCurIndex + txtSuche.Text.Length.)
iCurIndex einfach auf die Länge zu stellen, ist sicher nicht richtig. Sie muss schon dazugezählt werden.

Hast du die zwei Textfelder zufällig vertauscht? :unsure
 
A

AlienJoker

Gast
Also ich würde auch mal prüfen, ob du wirlich alle deine Felder richtig ansprichst, denn der Kot sieht soweit eigentlich gut aus.
 
A

AntiSchuppen

Threadstarter
Mitglied seit
23.07.2006
Beiträge
104
Ok, :) offenbar hat VB als ich meine Text Boxen umbenannt habe den Quelltext angepaßt. Ich habs nochmal ausgetauscht. Jetzt gehts!

Nur noch eine Kleinigkeit. Ist es möglich das wenn der Treffer im Text weiter unten ist, auch in der TextBox nach unten gescrollt wird damit der Treffer zu sehn ist?

Achja, und das + hab ich wieder gesetzt, sah für mich wie ein Tippfehler aus. Wieder was gelernt.


- Hat sich erledigt, habs mit txtSuche.ScrollToCaret() hinbekommen :)

Also vielen Dank für die Hilfe!! Ich denke damit ist das Problem gelöst.
 
Zuletzt bearbeitet:
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Ach ja, auf das Scrollen habe ich in der Hektik ganz vergessen. Sorry.
 
A

AntiSchuppen

Threadstarter
Mitglied seit
23.07.2006
Beiträge
104
Es sei dir verziehen ;)
 
Thema:

Textsuche mit VB 08 Express

Textsuche mit VB 08 Express - Ähnliche Themen

  • Windows startet nach Einbauen einer PCI- Express nicht

    Windows startet nach Einbauen einer PCI- Express nicht: Hey Leute, ich habe ein großes Problem. Da ich ausgezogen bin, und die neue Wohnung bisher keinen LAN-Zugang hat und mein Desktop bisher nur über...
  • outlook express oder outlook unter windows 10

    outlook express oder outlook unter windows 10: also ganz früher bei windows 95 hatte ich outlook express das war gratis dabi . das outlook mussteste bezahlen .. .. jetzt habe ich windows 10 und...
  • outlook express funktioniert auf win 10 nicht mehr

    outlook express funktioniert auf win 10 nicht mehr: Hallo, ich habe auf meinem win 10 pc neben Office 2013 noch xp professional plus mit Outlook installiert. Bis zum letzten Windows update...
  • Kann garmin Express nicht laden

    Kann garmin Express nicht laden: Anscheind fehlt eine msi wie kann ich dei reparieren
  • Bildersammlung mit Textsuche

    Bildersammlung mit Textsuche: Hallochen! Ich habe da mal 'ne Frage wo ich schon ein Zeitchen rumgrüble und suche... Gibt's ein Tool, welches mir erlaubt, allerlei Bildern auf...
  • Ähnliche Themen

    • Windows startet nach Einbauen einer PCI- Express nicht

      Windows startet nach Einbauen einer PCI- Express nicht: Hey Leute, ich habe ein großes Problem. Da ich ausgezogen bin, und die neue Wohnung bisher keinen LAN-Zugang hat und mein Desktop bisher nur über...
    • outlook express oder outlook unter windows 10

      outlook express oder outlook unter windows 10: also ganz früher bei windows 95 hatte ich outlook express das war gratis dabi . das outlook mussteste bezahlen .. .. jetzt habe ich windows 10 und...
    • outlook express funktioniert auf win 10 nicht mehr

      outlook express funktioniert auf win 10 nicht mehr: Hallo, ich habe auf meinem win 10 pc neben Office 2013 noch xp professional plus mit Outlook installiert. Bis zum letzten Windows update...
    • Kann garmin Express nicht laden

      Kann garmin Express nicht laden: Anscheind fehlt eine msi wie kann ich dei reparieren
    • Bildersammlung mit Textsuche

      Bildersammlung mit Textsuche: Hallochen! Ich habe da mal 'ne Frage wo ich schon ein Zeitchen rumgrüble und suche... Gibt's ein Tool, welches mir erlaubt, allerlei Bildern auf...
    Oben