2017-03-13 2 views
0

DateistrukturLesen Sie komplexe Textdatei mit Vb.net

RECORD 
1234567890,123456789,1234567,Address1,,City,State,Zip,USA,Phone,,,,,,,,, 
EmpName,DBAName,ID,,Address1,,Address1,City,60603,USA,234567890,,,, 
C,03/13/2017,,1,2, 
RECORD 
1234567890,123456789,1234567,Address1,,City,State,Zip,USA,Phone,,,,,,,,, 
EmpName2,DBAName2,ID2,,Address2,,Address2,City2,60603,USA,234567890,,,, 
C,03/13/2017,,1,2, 

bei der obigen Dateistruktur der Suche, ich möchte Datei durchlaufen und für jeden Datensatz (RECORD), möchte ich in einem nächsten drei Zeilen setzen Array und dann nächsten Datensatz in einem separaten Array.

Ich suche nach Skelett-Code, ich bin sehr neu in der Programmierung mit Stream-Readern.

-Code bisher

Dim read As New System.IO.StreamReader("C:\New Text.txt") 
     Dim a As String 

     For Each a In read.ReadLine 
      If read.ReadLine.Equals("RECORD") Then 
       \\How do I read next 3 lines and put them in one array with comma delimiter 
      End If 
     Next 
+0

Ich würde die 'string.Split()' -Funktion zusammen mit der 'File.ReadAllText()' suchen, das ist eigentlich nicht so schwierig. Es gibt viele Arbeitsbeispiele, selbst auf dieser Seite selbst. VB.NET Lies bestimmten Text in einer Textdatei. Der fünfte Link unter 'Related' – MethodMan

+2

macht es einfach. lese die nächsten 3 Zeilen (ReadLine), dann zeichne die 3 Zeichen, die du bekommst. – pm100

+0

@ pm100 Kannst du mir bitte sagen, wie man nur die nächsten drei Zeilen liest? Und dann, wie Sie sie in ein Array setzen. Ich werde es zu schätzen wissen, wenn Sie einen Code schreiben können –

Antwort

4

Sie benötigen einen Strukturdaten, wo Sie die Linien halten wird geladen und dann starten Sie Ihre Schleife

' Here you will keep the 3 lines block joined together and splitted on comma 
Dim records = new List(Of String())() 

Using read As New System.IO.StreamReader("C:\New Text.txt") 
    Dim a As String 

    ' Read each line (Assuming that we start with a RECORD line 
    For Each a In read.ReadLine 
     ' Do not read another line, but just test what is present in the string 
     If a.Equals("RECORD") Then 

      ' Now read the 3 following lines.... 
      Dim line1 = read.ReadLine 
      Dim line2 = read.ReadLine 
      Dim line3 = read.ReadLine 
      'Join the lines togeter 
      Dim record = string.Join("", line1, line2, line3). 
      ' Split on the comma to produce an array of strings. The fields. 
      Dim fields = record.Split(","c) 
      records.Add(fields) 
     End If 
    Next 
End Using 

Natürlich sollte dies eine ordnungsgemäße Verwendung verbessert werden Klasse, die Ihre Eingaben beschreibt, wobei jede Eigenschaft der Klasse ein Feld der geladenen CSV-Datei darstellt. Und dann könnten Sie die Liste (Of String()) in eine Liste (Of YourClassData) ändern

Beachten Sie, dass diese Lösung extrem abhängig von einer genauen Dateistruktur ist. Auf eine Zeile mit dem Inhalt "RECORD" sollten immer drei Datenzeilen folgen. (Keine Leerzeilen zwischen den drei Datenzeilen erlaubt)

+2

brechen Auch viel Spaß beim Lesen Ihrer Antworten :) – Werdna

-1
 Dim read As New System.IO.StreamReader("C:\New Text.txt") 
//I usually only do C#, but rough VB.NEt code: I did not rcreate your array for you, figured you got that :-) 
     Dim a As String 
     Dim myConcatString as String 
     For Each a In read.ReadLine 
      Dim myReadLine as String 
      myReadLine = read.ReadLine 
      If myReadLine.Equals("RECORD") Then 
myConcatString = myConcatString & myReadLine 
       \\How do I read next 3 lines and put them in one array with comma delimiter 
      else 
      //add myConcatString to array if not null.... 
myConcatString ="" 
      End If 
     Next 
+0

Ich habe nicht die "drei" Zeilen hart-Code, wie Sie wirklich bei jedem Auftreten von "RECORD" – Trey