terminatorvb
Goto Top

VB Textdatei öffnen, bestimmte Zeilen finden und benutzen.

Hallo VBler

Da ich schon mehrere postivie Erfahrungen mit dieser Seite hatte, werde ich sie mal weiterbenutzen ;)

Ich wollte fragen, und es ist eine lange Frage, wie kann man in Visual Basic eine Textdatei öffnen, den Inhalt lesen, eine bestimmte Zeile suchen und deren Inhalt verwenden?
Ein Beispiel:

Ich klicke in meinem Programm auf "Öffnen", ein Fenster öffnet sich, welches mich eine Textdatei (in meinem Fall eine .d Datei, welches aber auch eine Textdatei ist) öffnen lässt. Der Inhalt der Datei kann optional in einer RichTextBox gezeigt werden. Es soll nun nach bestimmten Zeilen gesucht werden. Zum Beispiel eine Zeile die mit "name = " (ohne Anführungszeichen) beginnt. Der nachfolgende Text, logischerweise der Name, soll dann gespeichert werden und in einer TextBox gezeigt werden (oder besser als Variable festgehalten werden, welche die TextBox deklariert.
Ich hoffe das war verständlich genug.

*EDIT: Was mir gerade noch offTopic einfällt, ohne extra ein neues Thema aufzumachen:
Wie kann man so eine Art Handbuch zu einem Programm machen? Ähnlich wie wenn man bei einem Programm auf F1 drückt. Da öffnet sich ja so ein Hilfe"buch" mit verschiedenen Kapiteln bzw. Unterpunkten, welche dann erklärt werden.

LG
Benedikt

Content-ID: 157807

Url: https://administrator.de/contentid/157807

Ausgedruckt am: 16.11.2024 um 01:11 Uhr

Pjordorf
Pjordorf 31.12.2010, aktualisiert am 18.10.2012 um 18:44:36 Uhr
Goto Top
Hallo,

Zitat von @TerminatorVB:
Ich wollte fragen, und es ist eine lange Frage, wie kann man in Visual Basic eine Textdatei öffnen, den Inhalt lesen, eine
bestimmte Zeile suchen und deren Inhalt verwenden?
Ein Beispiel:
Diese Frage hast du doch schon am 12.10.2010 gestellt. Siehe Wie Text in einer Textdatei suchen und benutzen?

Gruß,
Peter
TerminatorVB
TerminatorVB 31.12.2010 um 14:37:46 Uhr
Goto Top
Oh verdammt... Ich bin noch so jung und hab das schon wieder vergessen...
Ok dann zu dem anderen Thread eine Frage: Wie macht man einen OpenFileDialog? Denn der User soll ja bestimmen können, welche Datei geöffnet werden soll.

*EDIT: Bei der if-Funktion scheitert es!

So sieht es aus:

Dim FileName As String = "C:\Users\Benne\Desktop\KDF_45_Alkas.d"
Dim SearchFor As String = "name" 'Suchbegriff
Dim Sep = " = " 'Trennung vom Wert
Dim EOL As String = ";" 'Zeilenende-Kennung

Dim sr As IO.StreamReader = IO.File.OpenText(FileName) 'Textdatei zum Lesen öffnen ...
Dim Content As Array = Split(sr.ReadToEnd, vbCrLf) '... und zeilenweise in Array einlesen
Dim Value As String

For Each Line In Content 'alle Zeilen durchgehen

If InStr(Line, SearchFor & Sep) = 1 And Microsoft.VisualBasic.Right(Line, 1) = EOL Then 'beginnt Zeile mit Suchbegriff + Trennung und endet mit Zeilenende-Kennung?
Value = Split(Split(Line, Sep)(1), EOL)(0) 'isolieren des interessierenden Teiles
MsgBox(Value)
End If

Next

Ich hab es mit MsgBox' getestet. Die if-Funktion wird nicht durchgeführt.
LG
Pjordorf
Pjordorf 31.12.2010 um 14:45:32 Uhr
Goto Top
Hallo,

Zitat von @TerminatorVB:
Oh verdammt...
face-smile

Wie macht man einen OpenFileDialog? Denn der User soll ja bestimmen können, welche Datei geöffnet werden soll.
Dazu gibt es in der Doku sowie Hilfe zu deinem Visual Basic genügend Erklärungen und Beispiele.

Gruß,
Peter
TerminatorVB
TerminatorVB 31.12.2010 um 15:01:06 Uhr
Goto Top
Welche Doku und welche Hilfe? :D
76109
76109 31.12.2010 um 15:40:28 Uhr
Goto Top
Hallo

Sollte so einfacher gehen:
Dim sr As IO.StreamReader = IO.File.OpenText(FileName) 'Textdatei zum Lesen öffnen ...  

Dim EOL As String = ";"  
Dim SearchFor As String = "name = "  
Dim Value As Array
Dim i As Integer

Dim Content As Array = Split(sr.ReadToEnd, SearchFor)

For i = 1 To UBound(Content) 
    Value = Split(Content(i), EOL)
    If UBound(Value) > 0 Then MsgBox Value(0)
Next

Gruß Dieter

[edit] For-Schleife geändert [/edit]
Pjordorf
Pjordorf 31.12.2010 um 16:23:19 Uhr
Goto Top
Hallo,

Zitat von @TerminatorVB:
Welche Doku und welche Hilfe? :D
Ist das jetzt eine Fangfrage?

Du hast ja noch nicht einmal deine verwendete Visual Basic Version angeben können!

Eine Dokumentation ist seit Visiual Basic 1 anbei.

Die Hilfe (F1 Taste an deiner Tastatur während du in der IDE bist) ist auch mit dabei.

Ansonsten [http://lmgtfy.com/?q=visual+basic+hilfe hier} lesen.

Und
Ich hab es mit MsgBox' getestet. Die if-Funktion wird nicht durchgeführt.
halte ich für ein gerücht. Die IF abfrage wird definitiv abgearbeitet. Das Ergebniss der wenn - dann Bedingung mag dir vielleicht nicht gefallen, aber abgearbeitet wird die schon. Mit welchen werten wird denn die Abfrage ausgeführt?

Was steht in Line?
Gibt es in Line deinen Suchbegriff? Wenn ja, wird dann noch die und Bedingung Microsoft.VisualBasic.Right(Line, 1) = EOL erfüllt? Nein?

Mach mal ein Else dazu und lasse dir Line ausgeben.
If InStr(Line, SearchFor & Sep) = 1 And Microsoft.VisualBasic.Right(Line, 1) = EOL Then 'beginnt Zeile mit Suchbegriff + Trennung und endet mit Zeilenende-Kennung?   
   Value = Split(Split(Line, Sep)(1), EOL)(0) 'isolieren des interessierenden Teiles   
   MsgBox(Value) 'Ausgeben des Suchbegriffs  
ELSE 'Bedingung wurde nicht erfüllt  
   MsgBox(Line) 'Ausgabe vom Inhalt line  
End If

Gruß,
Peter
mathe172
mathe172 03.01.2011 um 14:21:45 Uhr
Goto Top
Hallo

Ich hätte da jetzt mal kurz eine Frage(hat aber nicht direkt mit dem Inhalt zu tun): Warum benutzt ihr immer
"Dim Etwas as Array" und nicht "Dim Etwas() as String"?
Wo liegt der unterschied? Ist es nicht besser, wenn das Programm weiss dass es sich um eine String handelt?

Mathe172
[edit: Bist du sicher dass du in der Textdatei kein " " zwischen "name" und "=" hast? Du fragst nämlich nach "name=" und nicht wie in deineer Frage geschrieben nach "name ="]
76109
76109 03.01.2011 um 15:42:40 Uhr
Goto Top
Hallo Mathe172!

Der Unterschied zwischen String (einfacher Text) und Array (mehrdimensionierbare Datenfelder) anhand eines Beispiels:

Inhalt > Text = "bla1;bla2;bla3;..."

Dim str As String = Text
Inhalt > str = "bla1;bla2;bla3;..."

Dim arr As Array = Split(Text, ";")
Inhalt > arr(0) = "bla1"
Inhalt > arr(1) = "bla2"
Inhalt > arr(2) = "bla3"
Inhalt > arr(3) = "..."

Gruß Dieter
mathe172
mathe172 03.01.2011 um 18:16:53 Uhr
Goto Top
Hallo Dieter!

"Dim Etwas() as String"
Bei mir bewirkt die Klammer genau dasselbe wie die Array bei dir...
Und wenn ich sie explizit dimensionieren will, schreib ich eine Zahl in die Klammer
Oder ist das ein unschöner/fehlerhafter Weg?

Mathe172
76109
76109 03.01.2011 um 18:29:23 Uhr
Goto Top
Hallo Mathe172!

Insofern hast Du für Strings (String-Array) natürlich recht!

In Arrays (Variant) können dagegen verschiedene Datentypen vermischt werden (Strings, Integer, Boolean...).

Gruß Dieter
mathe172
mathe172 03.01.2011 um 21:21:20 Uhr
Goto Top
Hallo Dieter!

In Arrays (Variant) können dagegen verschiedene Datentypen vermischt werden (Strings, Integer, Boolean...)
Danke - Werd ich mir merken face-smile

Mathe172