Announcement

Collapse
No announcement yet.

MyReader.ReadLine immer gleiche Zeile einlesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MyReader.ReadLine immer gleiche Zeile einlesen

    Hallo!
    Ich bin noch ein ziemlicher .NET Newbee und habe ein Problem mit der MyReader.ReadLine Funktion.
    Ich lese aus einer .csv Datei Daten ein, die ich dann Verarbeite. Funktioniert auch so weit ganz gut. Allerdings hab ich jetzt ein Problem. Ich möchte auf einen anderen parallel ablaufenden Programmteil warten. Hierzu möchte ich immer wieder die gleiche zeile einlesen bis Meine weiterschaltbedingung erfüllt ist. Wie kann ich das realsieren? Oder gibt es noch eine geschicktere Möglichkeit das einlesen der nächsten Zeilen zu unterbrechen? Anbei mein Code. Ich möchte, wenn ich ein } eingelesen hab, immer wieder die Zeile einlesen bis "=" Bedingung erfüllt ist. Kann mir da jemand helfen?

    Code:
        Sub LoadSettings(ByVal Path As String)
            Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(Path)
                MyReader.Delimiters = New String() {","}
                Dim currentRow As String
                Dim Index As Integer = 0
    
    
                While Not MyReader.EndOfData
                    Try
    
                        currentRow = MyReader.ReadLine()
                        SplitRow = Split(currentRow, ",")
    
                        If SplitRow(0) = "{" Then
                            LoadServer()
                        End If
    
                        If SplitRow(0) = "[" Then
                            LoadGroup()
                        End If
    
                        If SplitRow(0) = "(" Then
                            CollectItems()
                        End If
    
                        If SplitRow(0) = "]" Then
                            LoadItem()
                        End If
    
                        If SplitRow(0) = "}" Then
                            If ItemCnt <> MainForm.GroupUpdatesCTRL.UpdatesLV.Items.Count Then
                               
                            End If
                            If ItemCnt = MainForm.GroupUpdatesCTRL.UpdatesLV.Items.Count Then
    
                            End If
                        End If
    
                        If SplitRow(0) = "%%" Then
                            FinishLoad()
                        End If
    
                    Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
                        MsgBox("line " & ex.Message & "is invalid.")
                    End Try
                End While
    
            End Using
    
    
        End Sub

  • #2
    Hallo,

    verwende den StreamReader. Dieser stellt Methoden wie ReadXXX, Peek, etc. bereit. Da sollte schon dabei sein was du brauchst.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Der StreamReader stellt die gleichen Methoden wie der TextfieldParser bereit. Mein Problem bei der ReadLine-Methode ist, dass der Cursor automatisch auf die nächste Zeile gesetzt wird. Ich würde mir gerne die Position des Cursors merken und die .csv-Datei später an der gleichen Stelle weiter lesen. Ist das möglich? Wenn ja, wie?

      Comment


      • #4
        Der StreamReader kann nur vorwärts lesen. Mit ReadLine wird eine Zeile gelesen und der "Cursor" vorwärts bewegt. Zurück geht nicht.

        Mit Peek ließt der StreamReader das nächste Zeichen ohne es zu verarbeiten.

        Sollte dies nicht reichen wird nichts anderes über bleiben als den Inhalt in eine Liste einzulesen und auf diese wahlfrei zuzugreifen.

        Eine weitere Möglichkeit wäre den StreamReader mit der FileStream Überladung zu öffnen und die Position im FileStream verändern (dieser unterstütz Seek). Das hab ich nicht getestet ist nur so eine Idee.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Ok danke, die Variante mit Seek ist auch nicht so einfach, da ich das Lesen mehrmals unterbrechen muss. Ich lese es jetzt einfach in eine Liste ein und greife auf die zu, ist zwar nicht so schön wie ichs mit vorgestellt hab, aber funktioniert wenigstens.

          Comment

          Working...
          X