Wie Array in text speichern und lesen?

...komplette Frage anzeigen

3 Antworten

Wenn du bereit bist, dich am Anfang ein wenig einzuarbeiten, ist auf Dauer das einfachste, dich in die "Serialisierung" einzuarbeiten (also Verfahren, Objekte in Byteserien umzuwandeln und umgekehrt).

Für den Anfang einfacher wird sein, die Dateien als Streams zu öffnen.

Hier mal eine kleine Beispiellösung (Form1 mit Button1 und Button2):

Imports System.IO
Imports System.Text
Imports System.Web

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'Einfach mal ein paar Beispieldaten; hinterher werden die Arrays natürlich anders gefüllt
Dim arrInt() As Integer = New Integer() {4, 1, 8, 6, 2}
Dim arrStr() As String = New String() {"Zeile 1", "zweite Zeile", "Zeile Nr. drei"}

Using sw = New StreamWriter("arrInt.txt", False, Encoding.Default)
For i = 0 To arrInt.Length - 1
sw.WriteLine(arrInt(i))
Next
End Using

Using sw = New StreamWriter("arrStr.txt", False, Encoding.Default)
For i = 0 To arrStr.Length - 1
sw.WriteLine(HttpUtility.UrlEncode(arrStr(i), Encoding.Default))
Next
End Using
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim arrIntList = New List(Of Integer)
Dim arrStrList = New List(Of String)

Using sr = New StreamReader("arrInt.txt", Encoding.Default)
Do Until sr.EndOfStream()
arrIntList.Add(Integer.Parse(sr.ReadLine))
Loop
End Using

Using sr = New StreamReader("arrStr.txt", Encoding.Default)
Do Until sr.EndOfStream()
arrStrList.Add(HttpUtility.UrlDecode(sr.ReadLine, Encoding.Default))
Loop
End Using

Dim arrInt = arrIntList.ToArray()
Dim arrStr = arrStrList.ToArray()

'Hier würde die Ausgabe von arrInt bzw. arrStr folgen
End Sub
End Class

Using in Verbindung mit StreamWriter und StreamReader hat gegenüber dem herkömmlichen Öffnen von Dateien ein paar Vorteile - z. B. bleiben keine offenen Handles übrig, wenn während der Dateioperationen Fehler auftreten

HttpUtility.UrlEncode und URLDecode hab ich genommen, weil das die ersten einfach einsetzbaren Funktionen waren, die mir einfielen, bei denen man die Strings auch dann problemlos "serialisieren" kann, wenn sie auch mal Sonderzeichen (insbesondere Anführungszeichen und Zeilenumbrüche) enthalten.

Man kann in VB.NET auch die alten Methoden Open dateiname For Input/Output, Print/Write #dateinummer, variablenname usw verwenden; die sind aber langsamer und v. a. weniger stabil - es kann bei Dateioperationen (besonders übers Netzwerk) immer mal was schiefgehen.

List(Of Integer) bzw. List(Of String) habe ich verwendet, weil sie gegenüber Arrays den Vorteil haben, dass sie sich durch Add einfach erweitern lassen, ohne dass man sich selbst um das Redimensionieren kümmern muss. Ansonsten verhalten sie sich im Prinzip genau so wie Arrays. (In normalen Anwendungen merkt man von dem Verwaltungsoverhead nichts, und für Anwendungen, bei denen man es merken würde, sollte man sowieso C++ statt C# oder VB nehmen.)

Antwort bewerten Vielen Dank für Deine Bewertung

Schreib dir doch eine ArrayToFile-Funktion. Der Datentyp ist in VB(Script) eher unwichtig.

ArrayToFile.vbs

Main()


Sub Main() Dim arr(2) arr(0) = "Null" arr(1) = "Eins" arr(2) = 1+1 Call ArrayToFile(arr, "E:\\\\tmp\\\\arrayindatei.txt") End Sub
Sub ArrayToFile(arr, sFile) Dim C_FILE_FORWRITING : C_FILE_FORWRITING = 2 Dim oFile Dim fso Dim i
Set fso = CreateObject("Scripting.FileSystemObject") Set oFile = fso.OpenTextFile(sFile, C_FILE_FORWRITING, True) For i=LBound(arr) To UBound(arr) oFile.WriteLine arr(i) Next End Sub
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Oxym1996
18.08.2016, 23:15

funktioniert bei mir nicht... kannst du mir den code mit folgenden daten ändern? Ich finde den fehler nicht... als array : count as integer und die textdatei ist c:/mathe/text.txt lg

0

Was möchtest Du wissen?