txt Datei in Array einlesen

AccAkut

Grünschnabel
Guten Tag Gemeinde,

ich habe noch vor 3 Monaten ganz tolle Sachen in VB 6 gemacht :) Nun ist diese Ära notgetrunken erstmal vorbei und ich steh natürlich auf dem Schlauch :-(

Folgenden Code, der ganz simple eine txt-Datei supi schnell in ein Array reinspeichert bekomm ich nicht in Visual Basic.net übertragen:


Code:
    Public Sub File2Array(ByVal filename As String, ByRef TheArray As Object)

        Dim F10 As Integer
        Dim sInhalt As String

        If Dir(filename) = "" Then
            Exit Sub
        ElseIf filename = "" Then
            Exit Sub
        End If
        Dim filestream
        F10 = FreeFile: Open filename For Binary As #F10

        sInhalt = Space$(LOF(F10))
        Get #F10, , sInhalt
        Close #F10
        TheArray = Split(sInhalt, vbCrLf)
        sInhalt = ""

    End Sub

Würde mich über Hilfe sehr freuen. Ich möchte auf Redim verzichten...


viele Grüße
 
Code:
Dim sr As System.IO.StreamReader = New System.IO.StreamReader("C:\test.csv")

        Dim row() As String
        Dim i As Integer = 0

        Redim row(1)

        Do
            row(i) = sr.ReadLine()
            TextBox.Text &= row(i) & vbCrLf
            If IsNothing(row) Then Exit Do
            i = i + 1
            Redim Preserve row(i+1)
        Loop Until sr.EndofStream


So weiß ich vorher nie wie groß das row-Array noch wird. Oder gibts ne Möglichkeit die Zeilen in der txt/csv-Datei vorher abzufragen.

Im Anschluss gehts dann weiter mit Zeilentrennung aber das ist ein anderes Thema...
 
Zuletzt bearbeitet:
morgen,
wenn du die Zeilen nur unterscheiden willst dann würde ich die TXT-Datei eher mit ReadAllLines auslesen. Ob das jetzt genau dem entsprichst was du dir vorstellst weiß ich nicht genau. Mit ReadAllLines ließt du eine TXT oder eine ähnliche unkodierte Datei in einen nicht dimensionierten Array ein. Jedes Array-Element bekommt dann eine Zeile aus der Textdatei. Das würde dann so gehen:
Code:
Dim txtdat () as String
txtdat = system.IO.File.ReadAllLines(txtdatpfad,System.Text.Encoding.Default)
Default steht für die Standardcodierung deines Systems, bei mir ANSI^^. Du kannst anstatt dessen auch ASCII oder sonst eine nehmen.
Gruß romin

//edit: Ist auch deshalb vorteilhaft, weil man keinen Redim Preserv braucht, was bei hohen Zeilenzahlen doch sehr auf die Performance schlägt^^. Nachteil ist natürlich, dass man nicht sagen kann das man es selber programmiert hat, ich meine eine Zeile Programmcode ^^
 
Zuletzt bearbeitet:
Hey ho romin,


ja das ist doch mal genau die Routine die ich gesucht habe. Ich hab die Daten in einem Array, kann auf alles zugreifen und das geht auch ab wie di wilde Lutzi...

Hab grad mal ein Leistungstest gemacht mit einer 22 MB großen txt Datei.

Die VB.net Version mit Redim in der Mitte braucht 57 Sekunden

Deine / bzw die von Visual Studio brauch knapp 3 Sekunden :)


Ganz oben der VB 6.0 Code ist übrigens genauso schnell. Liegt einfach daran, dass die Daten direkt in den Speicher geladen werden. Da entfällt das Redimensionieren wegen dem Füllen mit Leerzeichen.

Vielen Dank
 
Ach kein Problem. War mir zuerst nur nicht sicher weil ich mit dem VB6 Code recht wenig anfangen konnte^^. Freut mich das ich helfen konnte^^. Bin doch auch nur nen Anfänger
Gruß romin
 

Neue Beiträge

Zurück