Readline - aber die Zeile darunter

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von LevelXProject.

    Readline - aber die Zeile darunter

    Guten Tag, VB-Paradise

    Ich hatte vor ein Programm zu machen, welches sich bestimmte Parts aus eine .txt Datei ausliest und diese danach in eine Textbox schreibt.
    Mit dem Streamreader habe ich schonmal ein wenig herumexperimentiert, allerdings brauche ich jeweils eine spezielle Zeile, die ausgelesen wird.
    Diese Zeile ist 5 Mal vorhanden in der Textdatei und jede dieser 5 Zeilen soll der Reihe nach ausgelesen werden.

    Und jetzt zu meinem Problem:
    Gerade genannte Zeilen sind komplett gleich, nur dass sie am Ende jeweils einen Unterschiedlichen Wert X stehen haben.
    Die Sache ist, dass jeweils die Zeile darüber anders ist.
    Deshalb würde ich gerne mit dem Streamreader immer nur diese Zeile suchen, die anders ist.
    Danach allerdings soll das Programm die Zeile darunter auslesen.

    Was ich bis jetzt zu stande gebracht habe sieht folgendermaßen aus:

    Brainfuck-Quellcode

    1. myStreamReader = New StreamReader("C:/BGruppen.txt", System.Text.Encoding.ASCII, True)
    2. Do Until myStreamReader.EndOfStream
    3. Einzelzeile = myStreamReader.ReadLine
    4. Dim Position As Integer = Einzelzeile.IndexOf("BGruppeNr:")
    5. If Position >= 0 Then
    6. TextVorDoppelpunkt = Einzelzeile.Substring(0, Position)
    7. TextNachDoppelpunkt = Einzelzeile.Substring(Position + Chr(13) + 14) <-------- Hier liegt der Fehler
    8. Else
    9. TextVorDoppelpunkt = Einzelzeile
    10. TextNachDoppelpunkt = String.Empty
    11. End If


    Die auszulesende Datei heißt "BGruppen.txt"
    Die Zeile, die anders ist, fängt immer mit "BGruppeNr:" an.
    Danach kommt halt das, was in jeder Zeile unterschiedlich ist.

    Jetzt habe ich mir gedacht, man könne einfach bei "Position + ..." ein Chr(13) schreiben, da das ja das Zeichen für einen Zeilenumbruch ist.
    (Oder irre ich mich da?)
    Und dann soll das, was 14 Zeichen danach kommt, ausgelesen werden.

    Ich hoffe, dass jemand von euch mir helfen kann. :)

    Und dann muss ich natürlich noch sagen:
    Danke, dass ihr euch diesen langen Post bis zum Ende durchgelesen habt ^^

    MfG
    LevelXProject

    E//:
    Und bevor ichs vergesse:
    Das, was ich dort oben makiert habe funktioniert nicht (es wird unterschlängelt)
    Ich glaube, das wäre als Information ganz wichtig ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LevelXProject“ ()

    Probiere es mal so:

    VB.NET-Quellcode

    1. Dim allLines() As String = System.IO.File.ReadAllLines(DEINE_DATEI)
    2. For Each line As String In allLines
    3. ' und hier kannst Du in Ruhe was tun
    4. Next
    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!
    Gut - dann habe ich in der Variable "allLines" alle Zeilen des Textdokuments, oder?

    VB.NET-Quellcode

    1. For Each line As String In allLines
    2. ' und hier kannst Du in Ruhe was tun


    OK - und was kann ich da jetzt machen?
    Wäre es jetzt möglich, z.B. Zeile 75 herauszuholen und diese ab dem 14 Zeichen auszulesen?
    (Und wenn ja, dann bräuchte ich da eine Erklärung zu. Also, wie man diese Zeile herausholt. In eine Textbox schreiben müsste ich noch hinbekommen ;) )

    Oder gibt es noch andere Möglichkeiten, mit denen man das angestrebte Ziel erreichen kann?

    Fagen über Fragen
    MfG
    LevelXProject

    VB.NET-Quellcode

    1. Dim Line75 As String = allLines(75) ' Achtung, Null-basiert!
    2. Dim RestOfLine75 = Line75.SubString(14) ' ebenfalls Null-basiert!
    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!
    Super. Es klappt alles perfekt.
    Auch wenn die Abzählarbeit wegen den Zeilen ein wenig nervtötend war ;)

    Jetzt habe ich alle nötigen Sachen geladen.
    Doch jetzt muss ich noch die Sachen speichern.
    Das sollte natürlich ebenfalls in die richtige Zeile erfolgen, sowie an die richtige Stelle (also bei mir mal wieder 14 Zeichen danach).

    Auch mit dem Streamwriter habe ich schonmal ein wenig gearbeitet.
    Allerdings fehlt mir auch hier die Kentniss, wie man es auf eine bestimmte Zeile und auf das 14 Zeichen präzisiert.
    Die Zahl soll auch nicht angehängt sondern überschrieben werden.

    Wäre wirklich gut, wenn man mir hir noch ein letztes Mal Hilfe geben könnte.
    Bis jetzt wart ihr (du) ja schon super.

    MfG
    LevelXProject

    E//:
    Ich habs auch mal selbst veruscht.
    War aber nicht gerade von Erfolg gekrönt (um es nett auszudrücken)

    Hier ist mein Code-Schnippsel:

    VB.NET-Quellcode

    1. Dim allLines() As String = System.IO.File.ReadAllLines("C:/BGruppen.txt")
    2. For Each line As String In allLines
    3. allLines(256) = " Wohnmax: " & Text1.Text <----- Die Textboxen, in die die Werte geladen wurden
    4. allLines(302) = " Wohnmax: " & Text2.Text
    5. allLines(367) = " Wohnmax: " & Text3.Text
    6. allLines(442) = " Wohnmax: " & Text4.Text
    7. allLines(513) = " Wohnmax: " & Text5.Text
    8. Next
    9. Dim TextName As String = "C:/BGruppen.txt"
    10. Dim writer As StreamWriter
    11. Dim enc As System.Text.Encoding
    12. Dim append As Boolean = False
    13. enc = System.Text.Encoding.ASCII
    14. writer = New StreamWriter(TextName, append, enc)
    15. writer.Write(allLines)
    16. writer.Close()


    Ich habe also jede betreffende Line in "AllLines" neu definiert.
    Also dieses "Wohnmax" und dahinten dran dann die jeweiligen Werte in den Textboxen.
    Diese AllLines sollten also immer noch alle Informationen des Textdokumentes enthalten, nur mit jeweils veränderten Werten in diesen 5 einzelnen Lines.
    Ich glaube, ich habe aber evtl. etwas bei "Encoding" falsch gemacht.
    Denn wenn der Text überschrieben werden sollte, steht nachher im Textdokument etwas wie "System.String[]" oder ähnliches.
    Kann es sein, dass ich die falsche Codierung gewählt habe?
    Oder kann der Wert von AllLines (den ich denke mal, das ist dieser "System.String") gar nicht so einfach übertragen werden und muss ebenfalls ersteinmal codiert werden?

    Oder bin ich gerade auf der völlig falschen Spur? :huh:

    MfG
    LevelXProject

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „LevelXProject“ ()

    In einer bestehenden Datei auf der Festplatte rumzueditieren würde ich nicht tun, das geht bei Deinem Vorhaben vor die Hose.
    Editiere die Zeilen im Speicher und schreib sie mit

    VB.NET-Quellcode

    1. System.IO.File.WriteAllLines(...)
    auf die Festplatte.
    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!
    Die Datei ist nicht direkt auf der Festplatte.
    Ich habe sie nur für Testzwecke auf ein leicht zu erreichendes Ziel kopiert.


    VB.NET-Quellcode

    1. System.IO.File.WriteAllLines(...)


    Tut mir leid, aber damit komme ich nicht wirklich weiter.
    Bei mir kommt diese Fehlermeldung:
    "Fehler bei der Überladungsauflösung, da keine zugreifbare "WriteAllLines" diese Anzahl von Argumenten akzeptiert",
    wenn es bei mir so aussieht:

    VB.NET-Quellcode

    1. System.IO.File.WriteAllLines("C:/BGruppen.txt")


    Muss ich noch etwas anderes in die Klammer hinzufügen?
    Etwas wie "string" o.Ä.?
    Habs auch schon mit einer Art "Hilfsvariable" versucht, die ich als String definiert habe, und die mit einem Komma nach der Datei-Adresse gesetzt

    Hoffe, ich kann wieder auf diese ungaublich schnelle Hilfe von euch (dir) setzen. :)

    MfG
    LevelXProject

    LevelXProject schrieb:

    Muss ich noch etwas anderes in die Klammer hinzufügen?
    Etwas wie "string" o.Ä.?
    :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup:

    VB.NET-Quellcode

    1. System.IO.File.WriteAllLines("C:/BGruppen.txt", DEIN_TEXT_FELD)
    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!
    Hab tausend Dank, dass du meine vielen Fragen so ausdauernd beantwortet hast :)
    Es hat alles so funktioniert, wie es hätte sein sollen.

    Wirklich ein großes Dankeschön.

    MfG
    LevelXProject

    PS: Vor allem das Ende hat mich besonders irritiert, weil ich keinen Plan hatte, wie man "mehrdimensionale Arrays" in eine Textdatei schreiben sollte. ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LevelXProject“ ()

    Dann kannst Du ja auf den Bedanken-Button und den Erledigt-drücken und so den Thread schließen.
    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!
    Danke, aber ich meinte damit, dass ich auch schon auf einem anderen Forum angemeldet bin (was nicht so genau was mit Programmieren zu tun hat) und ich von der den Bedanken-Button kenne, aber den Erledigt-Button gibts da nicht.
    Ich hab ihn ja aber schon gefunden ^^

    Aber auch wenn ich ein vollkommener Anfänger wäre, und diesen Button nicht gefunden hätte, bin ich froh, dass nicht solche Antworten gekommen sind, wie: "Ey, kannse nicht richtgi kuken, oder was?!!!????"
    :D

    Sorry, wegen OT ;)

    MfG
    LevelXProject