none
bestimmten wert in txt finden und anderen wert auslesen RRS feed

  • Frage

  • Hallo, habe folgendes Problem:

    Ich möchte einen bestimmten Wert in einer txt finden und den dazugehörigen wert auslesen.

    Nutze derzeit VB2008, habe schon mit Regexp herumexperimentiert aber bin zu keinem Ergebnis gekommen...

    txt sieht z.b. so aus

     

    <wert1>dieter</wert1>

    <wert2>piepenbrink</wert2>

     

    Das Prog soll jetzt nach Dieter suchen und mir in einer textbox Piepenbrink ausgeben. Oder nach wert2 hinter Dieter suchen

     

    Vielen Dank im Voraus

    Daniel

    Samstag, 11. September 2010 21:20

Antworten

  • Hallo Daniel,

    Die Daten in der txt sind immer mit zwei verschiedenen
    Bezeichnungen versehen.

     Der <wert1>Daten1</wert1> ist quasi die Bezeichnunng
    für <wert2>Daten2</wert2>

    Suchen muss ich aber nach Daten1 , da die Bezeichnungen
    <wert1> und <wert2> noch öfter in der txt vorkommen und das
    ergebnis nicht eindeutig wäre. das prog würde den erstbesten
    wert finden und ausgeben.

    Der Wert Daten1 ist einmalig in der txt. Daten2 ist varaibel,
    da ich in mehreren txt-Dateien suchen will und diesen Wert
    extrahieren möchte.

    Ich will also die txt einlesen,

    Und hast diese Daten danach in einem String?

    nach Daten1 suchen.

    Nach einem bestimmten Begriff innerhalb eines
    Strings kannst Du so suchen:

            Dim Buffer As String
            Dim ToFind As String
            Dim Found As String
            Buffer = "Guten Morgen liebe Sonne"
            ToFind = "liebe"

            Dim I As Integer
            I = Buffer.IndexOf(ToFind)
            If I > -1 Then
                Found = Buffer.Substring(I, ToFind.Length)
                MsgBox _
                    (Found & ControlChars.CrLf & _
                     "an Position " & I.ToString & " gefunden.", _
                     MsgBoxStyle.Information)
            Else
                MsgBox _
                    (ToFind & ControlChars.CrLf & _
                     "nicht gefunden.", _
                     MsgBoxStyle.Information)
            End If

    Dahinter kommt dann sofort <wert2>Daten2</wert2>,
    den ich ausgeben will.

    Was genau heisst "dahinter kommt sofort"?
    Gibt es zwischen Wert1 und Wert2 keinerlei Trennzeichen
    wie z.B. ein Chr(32) oder ein sonstiges Zeichen?
    Wie ist dann das Ende von Wert2 definiert?

    Oder sind Wert1 und Wert2 z.B. jeweils durch Leerzeichen
    Chr(32) begrenzt?
    In diesem Fall könnte Deine Suche etwa so aussehen:

            Dim Buffer As String
            Dim Wert1 As String = "Hallo"
            Dim Wert2 As String = "Welt"
            Dim XWert2 As String
            Dim Wert2Len As Integer
            Dim StartIndex As Integer
            Dim EndIndex As Integer

            Dim i As Integer

            Buffer = _
                "Text zum Suchen von " & _
                Wert1 & " " & Wert2 & _
                " in einem String"

            MsgBox(Buffer, MsgBoxStyle.Information)

            i = Buffer.IndexOf(Wert1)
            If i > 0 Then
                StartIndex = i + Wert1.Length + 1
                EndIndex = InStr(StartIndex, Buffer, " ")
                EndIndex = Buffer.IndexOf(" ", StartIndex)
                Wert2Len = EndIndex - StartIndex
                XWert2 = Buffer.Substring(StartIndex, Wert2Len)
                MsgBox(Chr(39) & XWert2 & Chr(39), MsgBoxStyle.Information)
            End If

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Sonntag, 12. September 2010 17:58

Alle Antworten

  • Hallo Daniel,

     

    Ich habe mal vor einiger Zeit in einem Programm ein Wort im Text suchen und durch ein anderes ersetzen wollen.

     

    Für deine Zwecke umgewandelt habe ich zwei Textboxen genommen und einen Button.

    In Textbox1 schreibste deinen Suchbegiff.

     

    Der Code könnte dann so aussehen:

     

    Public Class Form1

     

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Try

     

                Me.TextBox2.Text = "Dieses Programm such den Dieter Piepenbrink."

                Me.Button1.Text = "Such Dieter"

     

            Catch ex As Exception

                MsgBox("Fehler " & ex.Message, MsgBoxStyle.Information)

            End Try

        End Sub

     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     

            Try

                Dim eingabe As String

                Dim suchen As String

                Dim ersetzen As String

                Dim anzeige As String

     

                eingabe = TextBox1.Text

                suchen = "Dieter"

                ersetzen = "Piepenbrink"

     

                If eingabe = suchen Then

                    anzeige = eingabe.Replace(suchen, ersetzen)

                    TextBox2.Text = anzeige

                Else

                    anzeige = "Fehlanzeige, kein " & suchen & " gefunden."

                    TextBox2.Text = anzeige

                End If

     

            Catch ex As Exception

                MsgBox("Fehler " & ex.Message, MsgBoxStyle.Information)

            End Try

     

        End Sub

    End Class

     

     


    Liebe Grüße Stefan
    Samstag, 11. September 2010 22:20
  • Hallo Daniel,

     

    da ich nicht ganz untalentiert darin bin, Fragen inhaltlich nicht immer so zu verstehen, wie sie gemeint sind, noch mal eine Rückfrage für den Fall, das das hier auch der Fall ist.

     

    Möchtest du nur einen Eintrag suchen und in Abhängigkeit davon ein Ereignis lostreten oder geht es um die Ermittlung und Gegenüberstellung von Daten?

    Im letzten Fall wir die Datenbank dein Weg sein denn dort kannst du Werte löschen, ergänzen, verändern …

     

     


    Liebe Grüße Stefan
    Samstag, 11. September 2010 22:27
  • Das mit dem Inhalt der Fragen kenne ich auch ;-)

    Die Daten in der txt sind immer mit zwei verschiedenen Bezeichnungen versehen. Der

    <wert1>Daten1</wert1> ist quasi die Bezeichnunng für <wert2>Daten2</wert2>

    Suchen muss ich aber nach Daten1 , da die Bezeichnungen <wert1>    und    <wert2> noch öfter in der txt vorkommen und das ergebnis nicht eindeutig wäre. das prog würde den erstbesten wert finden und ausgeben.

    Der Wert Daten1 ist einmalig in der txt. Daten2 ist varaibel, da ich in mehreren txt-Dateien suchen will und diesen Wert extrahieren möchte.

    Ich will alsodie txt einlesen, nach Daten1 suchen. Dahinter kommt dann sofort <wert2>Daten2</wert2>, den ich ausgeben will.

     

     

    MfG

    Daniel

    Sonntag, 12. September 2010 09:05
  • Hallo Daniel,

    das sieht mir doch mehr nach einer Datenbanklösung aus da du zusammengehörende Daten nach einem definierten Suchkriterium suchen möchtest.

    An dieser Stelle wäre es sicher der falsche Ansatz, nur nach einer Übereinstimmung innerhalb einer Textbox zu suchen, da du ja – wenn ich es jetzt richtig verstanden habe – den Wert1 (=Suchbegriff) nur als einigermaßen eindeutiges Suchkriterium verwendest um an den Rest der Daten zu gelangen.

    Schau dir mal diesen Link an:

    http://openbook.galileocomputing.de/python/python_kapitel_19_003.htm

    Der behandelt das Thema Datenbanken.

    Auch interessant ist das MS-Einführungsviedeo, das gegen Ende das Thema Datenbank anreist. Wenn du dieses Thema aufnimmst, kannst du damit schon dein Ziel erreichen.

    http://msdn.microsoft.com/de-de/beginner/bb964633(en-us).aspx

    Einfach nur einen Text suchen und finden, kannst du mit meinem bereits geposteten Code.
    Liebe Grüße Stefan
    Sonntag, 12. September 2010 16:34
  • Hallo Daniel,

    Die Daten in der txt sind immer mit zwei verschiedenen
    Bezeichnungen versehen.

     Der <wert1>Daten1</wert1> ist quasi die Bezeichnunng
    für <wert2>Daten2</wert2>

    Suchen muss ich aber nach Daten1 , da die Bezeichnungen
    <wert1> und <wert2> noch öfter in der txt vorkommen und das
    ergebnis nicht eindeutig wäre. das prog würde den erstbesten
    wert finden und ausgeben.

    Der Wert Daten1 ist einmalig in der txt. Daten2 ist varaibel,
    da ich in mehreren txt-Dateien suchen will und diesen Wert
    extrahieren möchte.

    Ich will also die txt einlesen,

    Und hast diese Daten danach in einem String?

    nach Daten1 suchen.

    Nach einem bestimmten Begriff innerhalb eines
    Strings kannst Du so suchen:

            Dim Buffer As String
            Dim ToFind As String
            Dim Found As String
            Buffer = "Guten Morgen liebe Sonne"
            ToFind = "liebe"

            Dim I As Integer
            I = Buffer.IndexOf(ToFind)
            If I > -1 Then
                Found = Buffer.Substring(I, ToFind.Length)
                MsgBox _
                    (Found & ControlChars.CrLf & _
                     "an Position " & I.ToString & " gefunden.", _
                     MsgBoxStyle.Information)
            Else
                MsgBox _
                    (ToFind & ControlChars.CrLf & _
                     "nicht gefunden.", _
                     MsgBoxStyle.Information)
            End If

    Dahinter kommt dann sofort <wert2>Daten2</wert2>,
    den ich ausgeben will.

    Was genau heisst "dahinter kommt sofort"?
    Gibt es zwischen Wert1 und Wert2 keinerlei Trennzeichen
    wie z.B. ein Chr(32) oder ein sonstiges Zeichen?
    Wie ist dann das Ende von Wert2 definiert?

    Oder sind Wert1 und Wert2 z.B. jeweils durch Leerzeichen
    Chr(32) begrenzt?
    In diesem Fall könnte Deine Suche etwa so aussehen:

            Dim Buffer As String
            Dim Wert1 As String = "Hallo"
            Dim Wert2 As String = "Welt"
            Dim XWert2 As String
            Dim Wert2Len As Integer
            Dim StartIndex As Integer
            Dim EndIndex As Integer

            Dim i As Integer

            Buffer = _
                "Text zum Suchen von " & _
                Wert1 & " " & Wert2 & _
                " in einem String"

            MsgBox(Buffer, MsgBoxStyle.Information)

            i = Buffer.IndexOf(Wert1)
            If i > 0 Then
                StartIndex = i + Wert1.Length + 1
                EndIndex = InStr(StartIndex, Buffer, " ")
                EndIndex = Buffer.IndexOf(" ", StartIndex)
                Wert2Len = EndIndex - StartIndex
                XWert2 = Buffer.Substring(StartIndex, Wert2Len)
                MsgBox(Chr(39) & XWert2 & Chr(39), MsgBoxStyle.Information)
            End If

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Sonntag, 12. September 2010 17:58