Ein neues Dokument nach einer gewissen Zeilenanzahl erstellen

  • VB.NET

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

    Ohje. Mit welchem Visual Studio und Framework arbeitest Du?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    adnanche schrieb:

    Bei mir nimmt er das ​$ nicht an
    Du scheinst ja wirklich mit sehr altem VS unterwegs zu sein.
    Schon mal über ein Update nachgedacht?

    OldStyle:

    VB.NET-Quellcode

    1. ​File.WriteAllText("H:\Test" & (offset \ 1000) + 1 & ".txt", sb.ToString())
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Da hier eh schon genügend C&P Code ist, hier mal die "Komfortlösung":

    C# Original

    C#-Quellcode

    1. private int SplitBigFile(int splitAt)
    2. {
    3. int filesCreated = 0;
    4. using (FileStream fsBig = File.OpenRead("YourBigFile.txt"))
    5. using (StreamReader sr = new StreamReader(fsBig, Encoding.UTF8))
    6. {
    7. do
    8. {
    9. using (FileStream fsSmall = File.Open("YourSmallFileName" + ++filesCreated + ".txt", FileMode.Create))
    10. using (StreamWriter sw = new StreamWriter(fsSmall, Encoding.UTF8))
    11. {
    12. for (int i = 0; i < splitAt && !sr.EndOfStream; i++)
    13. {
    14. sw.WriteLine(sr.ReadLine());
    15. }
    16. }
    17. } while (!sr.EndOfStream);
    18. }
    19. return filesCreated;
    20. }

    VB.NET by telerik

    VB.NET-Quellcode

    1. Private Function SplitBigFile(ByVal splitAt As Integer) As Integer
    2. Dim filesCreated As Integer = 0
    3. Using fsBig As FileStream = File.OpenRead("YourBigFile.txt")
    4. Using sr As StreamReader = New StreamReader(fsBig, Encoding.UTF8)
    5. Do
    6. Using fsSmall As FileStream = File.Open("YourSmallFileName" & (filesCreated += 1) & ".txt", FileMode.Create)
    7. Using sw As StreamWriter = New StreamWriter(fsSmall, Encoding.UTF8)
    8. Dim i As Integer = 0
    9. While i < splitAt AndAlso Not sr.EndOfStream
    10. sw.WriteLine(sr.ReadLine())
    11. i += 1
    12. End While
    13. End Using
    14. End Using
    15. Loop While Not sr.EndOfStream
    16. End Using
    17. End Using
    18. Return filesCreated
    19. End Function
    Ich habe den VB.NET Code nicht geprüft. Ich garantiere nur für C# volle/korrekte Funktionalität.

    Warum Komfortlösung? Es wird voller gebrauch der Stream-Architektur gemacht, um so wenig RAM wie möglich zu vebrauchen ohne sich dabei um Buffer und sonstige "Low-Level" Sachen kümmern zu müssen.
    Darüber hinaus kann man der Funktion auch sagen, ab wie vielen Zeilen eine neue Datei erstellt werden soll, und sie gibt einem zurück wie viele Dateien erstellt wurden.

    Edit:
    @adnanche Bitte keine PNs mehr in Zukunft. Eigentlich sind hier bereits so viele Lösungsansätze und Hilfestellungen, dass du in der Lage sein müsstest, selbst eine Lösung zu finden. Daher auch mein Unwille hier noch etwas zu posten.
    Meine dennoch gepostete Antwort positioniere ich daher als Alternative zu deiner eigenen Lösung, die du uns noch nicht offenbart hast, und nicht als die konkrete Lösung deines Problems.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen

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

    adnanche schrieb:

    $
    Höheres Studio, höheres Framework.
    offset ist das n-te Tausend Zeilen.
    offset = 0: 0 bis 999
    offset = 1: 1000 bis 1999
    offset = 2: 2000 bis 2999
    If i >= lines.Length Then Exit For wenn i größer-gleich der Gesamtzeilenanzahl ist, dann ist das Dokument zu Ende und es gibt keine weiteren Zeilen, also Abbruch.
    sb.AppendLine(lines(i)) kriegst Du allein raus.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!