Anfängerfrage : unbekanntes Array aus Textdatei lesen und ein Teil davon wieder in eine neue Datei schreiben

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Anfängerfrage : unbekanntes Array aus Textdatei lesen und ein Teil davon wieder in eine neue Datei schreiben

    ' Hoffe ich habe die richtige Stelle im Forum zu diesem Thema getroffen.
    ' Ich bin zwar schon etwas älter, aber noch ein Anfänger im programmieren. Ich lerne mit VB 2010 und programmiere nebenher,
    ' um das was ich lerne auch praktisch anwenden und ausprobieren zu können ein Lottoprogramm. Ein Lottoprogramm, nicht um das Fahrad neu zu erfinden,
    ' sondern weil ich denke, in Diesem das meiste was ich hier lerne ( von Textausgabe über Grafikausgabe bis zur Datenbank ) auch einbauen zu können.
    ' So soll das Programm halt immer mitwachsen.
    ' Nun habe ich aber folgendes Problem. Ich habe eine Textdatei mit allen Ziehungen. Da in dieser Datei stehen aber mehr Informationen als ich brauche,
    ' deshalb möchte ich nur ein Teil davon in eine eigene Datei schreiben. Dafür könnte ich von euch ein paar "Denkanstöße" gebrauchen. Wie lese ich ein Array
    ' aus einer Textdatei aus, wenn ich nicht weis wie dieses Array genau zusammengesetzt ist. Und eine zweite Frage in dem Zusammenhang.
    ' Wenn ich dann meine Datei habe, kann ich diese in den Arbeitsspeicher bzw. Buffer laden, damit sie nicht jedesmal wenn ich etwas dort vergleichen
    ' möchte immer wieder geöffnet und gelesen werden muß ?
    ' Hier nun mein bisher vergeblicher Versuch. Das Programm läuft, gibt keinen Fehler aus und grinst mich dann mit lauter Nullen in der Ausgabe an.
    ' Eine Zeile in der vorhandenen Datei sieht z.B. wie folgt aus 2001-10-27, Samstag, 2, 12, 24, 32, 36, 47,, 5
    ' Da ich nicht weiss ob diese Zeile aus einem Array von 9 oder 11 Teilen besteht und meine Datei auf jedenfall ein Array von 6 Teilen haben soll,
    ' habe ich ersteinmal 3 Klassen geschrieben.
    ----------------------------------------------------------------------------------------------------------------
    Imports System.IO
    Public Class formZiehungen

    Public Class gefZahlenreihen
    Dim Zz1, Zz2, Zz3, Zz4, Zz5, Zz6, Zz, Sz As Byte
    Dim Zz1b, Zz2b, Zz3b, Zz4b, Zz5b, Zz6b As Byte

    Sub Create(ByVal aZz1 As Byte, ByVal aZz2 As Byte, ByVal aZz3 As Byte, ByVal aZz4 As Byte, _
    ByVal aZz5 As Byte, ByVal aZz6 As Byte)

    Zz1 = aZz1
    Zz2 = aZz2
    Zz3 = aZz3
    Zz4 = aZz4
    Zz5 = aZz5
    Zz6 = aZz6

    End Sub

    Sub Create(ByVal s As String)
    Dim teil() As String
    teil = s.Split(";")

    Zz1 = teil(0)
    Zz2 = teil(1)
    Zz3 = teil(2)
    Zz4 = teil(3)
    Zz5 = teil(4)
    Zz6 = teil(5)

    End Sub

    Function Merge() As String
    Merge = Zz1 & ";" & Zz2 & ";" & Zz3 & ";" & Zz4 & ";" & Zz5 & ";" & Zz6
    End Function

    Overrides Function ToString() As String
    ToString = Zz1 & ";" & Zz2 & ";" & Zz3 & ";" & Zz4 & ";" & Zz5 & ";" & Zz6
    End Function

    End Class

    '=======================================================================================================================
    '========================================================================================================================

    Public Class Ziehungen

    Dim Jahr, Monat, Tag, Zz1, Zz2, Zz3, Zz4, Zz5, Zz6, Zz, Sz As Byte
    Dim wochentag As String

    Sub Create(ByVal aJahr As Byte, ByVal aMonat As Byte, ByVal aTag As Byte, ByVal aWochentag As String, ByVal aZz1 As Byte, ByVal aZz2 As Byte, ByVal aZz3 As Byte, ByVal aZz4 As Byte, _
    ByVal aZz5 As Byte, ByVal aZz6 As Byte, ByVal aZz As Byte, ByVal aSz As Byte)

    Jahr = aJahr
    Monat = aMonat
    Tag = aTag
    wochentag = aWochentag
    Zz1 = aZz1
    Zz2 = aZz2
    Zz3 = aZz3
    Zz4 = aZz4
    Zz5 = aZz5
    Zz6 = aZz6
    Zz = aZz
    Sz = aSz

    End Sub

    Sub Create(ByVal s As String)
    Dim teil() As String
    teil = s.Split(";")

    Jahr = teil(0)
    Monat = (1)
    Tag = teil(2)
    wochentag = teil(3)
    Zz1 = teil(4)
    Zz2 = teil(5)
    Zz3 = teil(6)
    Zz4 = teil(7)
    Zz5 = teil(8)
    Zz6 = teil(9)
    Zz = teil(10)
    Sz = teil(11)

    End Sub

    Function Merge() As String
    Merge = Jahr & ";" & Monat & Tag & ";" & wochentag & ";" & Zz1 & ";" & Zz2 & ";" & Zz3 & ";" & Zz4 & ";" & Zz5 & ";" & Zz6 & ";" & Zz & ";" & Sz
    End Function

    Overrides Function ToString() As String
    ToString = Jahr & ";" & Monat & Tag & ";" & wochentag & ";" & Zz1 & ";" & Zz2 & ";" & Zz3 & ";" & Zz4 & ";" & Zz5 & ";" & Zz6 & ";" & Zz & ";" & Sz

    End Function
    End Class

    '=======================================================================================================================
    '====================================================================================================================
    Public Class Ziehungen10

    Dim Tag, Zz1, Zz2, Zz3, Zz4, Zz5, Zz6, Zz, Sz As Byte
    Dim wochentag As String

    Sub Create(ByVal aTag As Byte, ByVal aWochentag As String, ByVal aZz1 As Byte, ByVal aZz2 As Byte, ByVal aZz3 As Byte, ByVal aZz4 As Byte, _
    ByVal aZz5 As Byte, ByVal aZz6 As Byte, ByVal aZz As Byte, ByVal aSz As Byte)

    Tag = aTag
    wochentag = aWochentag
    Zz1 = aZz1
    Zz2 = aZz2
    Zz3 = aZz3
    Zz4 = aZz4
    Zz5 = aZz5
    Zz6 = aZz6
    Zz = aZz
    Sz = aSz

    End Sub

    Sub Create(ByVal s As String)
    Dim teil() As String
    teil = s.Split(";")

    Tag = teil(0)
    wochentag = teil(1)
    Zz1 = teil(2)
    Zz2 = teil(3)
    Zz3 = teil(4)
    Zz4 = teil(5)
    Zz5 = teil(6)
    Zz6 = teil(7)
    Zz = teil(8)
    Sz = teil(9)

    End Sub

    Function Merge() As String
    Merge = Tag & ";" & wochentag & ";" & Zz1 & ";" & Zz2 & ";" & Zz3 & ";" & Zz4 & ";" & Zz5 & ";" & Zz6 & ";" & Zz & ";" & Sz
    End Function

    Overrides Function ToString() As String
    ToString = Tag & ";" & wochentag & ";" & Zz1 & ";" & Zz2 & ";" & Zz3 & ";" & Zz4 & ";" & Zz5 & ";" & Zz6 & ";" & Zz & ";" & Sz

    End Function
    End Class

    '=======================================================================================================================
    '====================================================================================================================


    Private Sub btngefAbr_Click(sender As System.Object, e As System.EventArgs) Handles btngefAbr.Click
    Close()
    End Sub

    Private Sub btnZiehStart_Click(sender As System.Object, e As System.EventArgs) Handles btnZiehStart.Click
    Dim p As New Ziehungen
    Dim p2 As New gefZahlenreihen
    Dim aWochentag As String
    Dim aJahr, aMonat, aTag, aZz1, aZz2, aZz3, aZz4, aZz5, aZz6, aZz, aSz As Byte
    Dim s, s2 As String
    Dim nr As Integer

    ' s und s2 hab ich auf 0 gesetzt, da sonst die Fehlermeldung kam " Zur laufzeit kann eine Nullverweisausmahme auftreten.
    s = 0
    s2 = 0

    ' Ab hier wollt ich die vorhandene Datei einlesen, hab es auch mit der anderen Class versucht
    lstA.Items.Clear()
    If File.Exists("lot6aus49-2.txt") Then
    FileOpen(1, "lot6aus49-2.txt", OpenMode.Random)
    nr = 1
    Do
    Try
    FileGetObject(1, s)
    p.Create(s)
    lstA.Items.Add(nr & ": " &
    p.ToString())
    nr = nr + 1
    Catch ex As Exception
    Exit Do
    End Try
    Loop
    FileClose(1)
    Else
    lstA.Items.Add("Datei nicht vorhanden")
    End If

    ' bei "aWochentag" habe ich wieder die selbe Meldung wie bei s und s2
    p.Create(aJahr, aMonat, aTag, aWochentag, aZz1, aZz2, aZz3, aZz4, aZz5, aZz6, aZz, aSz)

    ' ab hier sollte ein neues Array gebildet und in die Datei geschrieben werden
    If File.Exists("data.txt") Then
    FileOpen(1, "data.txt", OpenMode.Random)
    FilePutObject(1, p2.Merge())
    nr = 1
    Do
    Try
    FileGetObject(1, s2)
    p2.Create(s2)
    lstA.Items.Add(nr & ": " &
    p2.ToString())
    nr = nr + 1
    Catch ex As Exception
    Exit Do
    End Try
    Loop

    Else
    lstA.Items.Add("Datei nicht vorhanden")
    End If

    FileClose(1)

    ' nun wollte ich mir die neugeschriebene Datei zur Konntrolle anzeigen lassen
    lstA.Items.Clear()
    If File.Exists("data.txt") Then
    FileOpen(1, "data.txt", OpenMode.Random)
    nr = 1
    Do
    Try
    FileGetObject(1, s2)
    p2.Create(s2)
    lstA.Items.Add(nr & ": " &
    p2.ToString())
    nr = nr + 1
    Catch ex As Exception
    Exit Do
    End Try
    Loop
    FileClose(1)

    Else
    lstA.Items.Add("Datei nicht vorhanden")
    End If

    End Sub

    End Class

    'Ich hoffe ihr könnt mir bissel helfen. Sicher ist mein Denkansatz irgendwie falsch. Jedenfalls stehe ich im Moment ganz schön auf den Schlauch
    'und wäre für Hilfe dankbar.

    Jiron schrieb:

    bissel helfen
    Du warst ja lange nicht hier. ;)
    Zunächst wäre es schön, wenn Du Deinen Post so formatierst, dass wir ihn so lesen können, wie Du es meinst.
    Also: Text ist Text, nix tun,
    Quellcode ist Quellcode, entsprechend formatieren: Markieren und dann auf den VB.NET-Button drücken (rot),
    Wenn der Code lang ist, mach nen Spoiler drum herum (grün):

    Bitte editiere Deinen Post entsprechend.
    ====================
    Ich hab Deinen Code nicht studiert, nur Dein Grob-Anliegen.
    Vielleicht so viel:
    Wenn Du an einer einzigen Zeile erkennst, ob sie in die neue Datei geschrieben werden soll oder nicht, lies die Urdatei zeilenweise aus und schreib die Zeile bei Bedarf in die neue Datei.
    Wenn nicht, lies alle Zeilen ein, mach eine List(Of String) draus, editiere die Zeilen und lösch, was gelöscht werden muss und schreibe das alles in die neue Datei.
    Bei System.IO.File.xxx findest Du die Lese- und Schfreibroutinen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany

    Ersteinmal danke dür deine Tip's und entschuldigung das der Text so dargestellt ist. Ich habe ihn direkt von Vb 2010 rauskopiert und hier reingesetzt. Hatte mich auch gewundert das es hinterher so aussah. Habs jetzt nochmal versucht und sieht wieder so aus. Beim nächstenmal werde ich schauen das ich es besser hinbekommen.
    Du hast auch recht, bin lange nicht dagewesen - mußte damals abbrechen und starte jetzt einen zweiten Anlauf VB2010 zu lernen.
    Nun werde ich mich mal an deine Vorschläge System.IO.File.xxx und List(Of String) setzen und melde mich wieder wenn ich etwas erreicht habe.

    Jiron schrieb:

    etwas erreicht
    Fang an und mach Dir ein kleines Testprojekt, in dem Du nur Text-IO untersuchst.
    Eine kleine Datei mit 5 Zeilen Text im Temp-Verzeichnis und los.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!