Ein neues Dokument nach einer gewissen Zeilenanzahl erstellen

  • VB.NET

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

    Ein neues Dokument nach einer gewissen Zeilenanzahl erstellen

    Hallo,
    ich habe eine externe .txt Datei und möchte dort nach 1000 Zeilen das Dokument trennen. Damit mehrere Dateien daraus machen.

    VB.NET-Quellcode

    1. Private Sub btnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click
    2. Dim array() As String = File.ReadAllLines("H:\Test.txt")
    3. For Each line In array
    4. Dim length As Integer = line.Length
    5. Next
    6. End Sub
    7. End Class

    weiß jetzt nicht wie er 1000 Zeilen ausließt und daraus anschließend ein neues Dokument erstellt.
    Wie kann man das umsetzen? Wo ist der Fehler?

    VB.NET-Quellcode

    1. Dim NumberOfLines As Integer
    2. For i As Integer = 1 To File.ReadAllLines("H:\Test.txt").Length - 1
    3. NumberOfLines = File.ReadAllLines("H:\Test.txt").Length
    4. NumberOfLines.Count()
    5. Next
    6. MsgBox(NumberOfLines)
    7. End Sub
    8. End Class

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

    Ich dachte da eher an sowas:

    VB.NET-Quellcode

    1. For i As Integer = 0 To array.Count - 1
    2. 'Speichere die aktuelle Zeile in einer Variablen. Diese muss außerhalb der Schleife definiert sein.
    3. If i Mod 1000 = 0 Then
    4. 'Schreibe die extra Variable in deine neue Datei und leere sie dann
    5. End If
    6. Next

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

    Habe es ein wenig anders gemacht, da ich nicht mit deiner Variante so klar kam.
    Habe nun das Problem, dass ich nicht weiß, wie ich ab der tausendsten Zeile die restlichen Zeichen in das Zweite Dokument packe.

    VB.NET-Quellcode

    1. Dim path As String = "H:\Test2.txt"
    2. Dim NumberOFLines As String
    3. NumberOFLines = File.ReadAllLines("H:\Test.txt").Length
    4. For i As Integer = 0 To NumberOFLines.Count - 1
    5. If i Mod 1000 = 0 Then
    6. Dim fs As FileStream = File.Create(path)
    7. Dim info As Byte() = New UTF8Encoding(True).GetBytes("wie schreibe ich ab der Tausendsten Zeile hier die restlichen Zeichen rein?")
    8. fs.Write(info, 0, info.Length)
    9. fs.Close()
    10. End If
    11. Next
    12. MsgBox(NumberOFLines)
    13. End Sub
    @adnanche So was:

    VB.NET-Quellcode

    1. Dim lines() = File.ReadAllLines("H:\Test.txt")
    2. Dim offset = 0
    3. Do
    4. Dim sb = New StringBuilder
    5. For i = offset + 0 To offset + 999
    6. If i >= lines.Length Then Exit For
    7. sb.AppendLine(lines(i)
    8. Next
    9. File.WriteAllText(DATEI_NAME, sb.ToString())
    10. offset += 1000
    11. Loop while offset < lines.Length
    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!
    @adnanche So was:
    @RodFromGermany Nein, da er da 1000 Zeilen aus der ersten Datei nur entfernt.
    Das Programm soll aus der ersten .txt ab 1000 Zeilen das ganze Trennen (aber auch die ersten 1000 Zeilen in der ersten .txt beibehalten) und den Rest in eine zweite .txt Datei schreiben.
    Dann nimm nur die ersten 1000 Zeilen, schreib sie in die 1. Datei und den Rest in die zweite.
    Aber bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden, denn

    VB.NET-Quellcode

    1. Dim NumberOFLines As String
    2. NumberOFLines = File.ReadAllLines("H:\Test.txt").Length
    3. '...
    4. To NumberOFLines.Count - 1
    :S

    Zum Problem nochmal eine Lösung so aus dem Kopf heraus. Geht bestimmt noch effizienter.

    VB.NET-Quellcode

    1. Dim path As String = "H:\Test2.txt"
    2. Dim FileLines = File.ReadAllLines("H:\Test.txt")
    3. If FileLines.Count <= 1000 Then
    4. IO.File.WriteAllLines(path, FileLines)
    5. Else
    6. Dim TheFirst1000Lines As New List(Of String)
    7. For i = 0 To 999
    8. TheFirst1000Lines.Add(FileLines(i))
    9. Next
    10. IO.File.WriteAllLines(path, TheFirst1000Lines)
    11. Dim AllTheOtherLines As New List(Of String)
    12. For i = 1000 To FileLines.Count - 1
    13. AllTheOtherLines.Add(FileLines(i))
    14. Next
    15. IO.File.WriteAllLines(pathOfTheSecondFile, AllTheOtherLines)
    16. End If
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @adnanche Ich weiß nicht was Du meinst.
    Bei mir werden aus einer Datei mit 2493 Zeilen 3 Dateien mit { 1000, 1000, 493 } Zeilen.
    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!
    Bei mir werden aus einer Datei mit 2493 Zeilen 3 Dateien mit { 1000, 1000, 493 } Zeilen.
    Ja genau so möchte ich das haben. Was hast du denn anstelle DATEI_Name eingetragen? Hast du dort "H:\Test1.txt" rein geschrieben?

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

    adnanche schrieb:

    Hast du dort "H:\Test1.txt" rein geschrieben?
    Nein.
    Ich habe kein Laufwerk H.
    Bei mir stand da "C:\Temp\Test1.txt" drinne. ;)
    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!
    Definiere

    adnanche schrieb:

    überschüssige Wörter

    RodFromGermany schrieb:

    Bei mir werden aus einer Datei mit 2493 Zeilen 3 Dateien mit { 1000, 1000, 493 } Zeilen.
    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!
    meine es genauso wie du es hier geschrieben hast:
    ​Bei mir werden aus einer Datei mit 2493 Zeilen 3 Dateien mit { 1000, 1000, 493 } Zeilen

    mit überschüssigen Wörtern meine ich, dass ab 1000 Wörtern die Restlichen Wörter in eine neue Datei geschrieben werden sollen.
    Öhm. Das ist jetzt ziemlich widersprüchlich. Was willst Du? Willst Du A: bei 5674 Zeilen 5 "volle" Dateien (mit je 1000 Zeilen) und eine "teilbefüllte" Datei (mit 674) oder B. eine mit 1000 und eine mit den restlichen 4674 Zeilen?

    Für A. spricht Deine Aussage

    adnanche schrieb:

    meine es genauso wie du es hier geschrieben hast:
    Bei mir werden aus einer Datei mit 2493 Zeilen 3 Dateien mit { 1000, 1000, 493 } Zeilen


    für B spricht

    adnanche schrieb:

    mit überschüssigen Wörtern meine ich, dass ab 1000 Wörtern die Restlichen Wörter in eine neue Datei geschrieben werden sollen.

    Na was denn nun?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Jou.
    @adnanche Bei mir landen die überschüssigen Wörter in der Datei, die nicht 1000 sondern nur 493 Zeilen lang ist.
    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!
    @VaporiZed Aussage A
    Öhm. Das ist jetzt ziemlich widersprüchlich. Was willst Du? Willst Du A: bei 5674 Zeilen 5 "volle" Dateien (mit je 1000 Zeilen) und eine "teilbefüllte" Datei (mit 674) oder B. eine mit 1000 und eine mit den restlichen 4674 Zeilen?


    @RodFromGermany Wenn ich es so schreibe geschieht dies bei mir nicht.
    Könntest du das zudem noch bitte kommentieren? Würde mir viel weiterhelfen, da ich da nicht ganz so durchblicke

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System
    3. Imports System.Text
    4. Public Class Form1
    5. Private Sub btnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click
    6. Dim lines() = File.ReadAllLines("H:\Test1.txt")
    7. Dim offset = 0
    8. Do
    9. Dim sb = New StringBuilder
    10. For i = offset + 0 To offset + 999
    11. If i >= lines.Length Then Exit For
    12. sb.AppendLine(lines(i))
    13. Next
    14. File.WriteAllText("H:\Test1.txt", sb.ToString())
    15. offset += 1000
    16. Loop While offset < lines.Length
    17. End Sub

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

    adnanche schrieb:

    zudem noch bitte kommentieren
    Um welche Zeilen geht es genau?
    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!
    Um welche Zeilen geht es genau?
    @RodFromGermany Worum es sich hierbei handelt

    VB.NET-Quellcode

    1. For i = offset + 0 To offset + 999
    2. If i >= lines.Length Then Exit For
    3. sb.AppendLine(lines(i))


    @petaod Bei mir nimmt er das ​$ nicht an und bezeichnet es als Character is not valid.

    VB.NET-Quellcode

    1. File.WriteAllText($"H:\Test{(offset \ 1000) + 1}.txt", sb.ToString())