Benutzer mit den meisten Antworten
bestimmten wert in txt finden und anderen wert auslesen

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
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 IfDahinter 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 IntegerDim 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 IfGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 13. September 2010 16:01
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 17. September 2010 13:02
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 -
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 -
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
-
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- Bearbeitet Robert BreitenhoferModerator Montag, 13. September 2010 16:01 Formatierung
-
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 IfDahinter 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 IntegerDim 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 IfGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 13. September 2010 16:01
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 17. September 2010 13:02