TXT absatzweise in der Konsole wiedergeben

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    TXT absatzweise in der Konsole wiedergeben

    Moin,

    ich hab jetzt rausgefunden wie man eine txt in der Konsole wiedergibt:

    C#-Quellcode

    1. public static string[] _zeile;
    2. public static StreamReader _sr;
    3. _sr = new StreamReader(_pfad1);
    4. Console.WriteLine("");
    5. Console.WriteLine("");
    6. Console.WriteLine(_sr.ReadToEnd());
    7. _sr.Close();


    nun würde ich gerne den besagten text absatzweise wiedergeben.

    Ich habe mir da eine Schleife gebaut, gibt den Text allerdings nur nach einer vorbestimmten Zeilenanzahl wieder, ist aber nicht in der Lage, die Absätze zu differenzieren.

    C#-Quellcode

    1. _zeile = System.IO.File.ReadAllLines(_pfad1);
    2. for (int i =_schleifenmin ; i <= _schleifenmax; i++)
    3. {
    4. Console.WriteLine(_zeile[i]);
    5. }
    6. Console.ReadLine();
    7. Console.WriteLine("");
    8. _schleifenmin += 9;
    9. _schleifenmax += 8;

    Danke LG
    @Visual_Prog Wenn ich Dich richtig verstehe: Zeilenschaltung (0x10, 0x13).
    Wird doch durch System.IO.File.ReadAllLines(_pfad1) bereitgestellt.
    Wo ist das Problem?
    Hast Du ein Beispiel, wo das nicht funktioniert?
    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!
    Also das klappt alles schon wie ich das geschrieben habe oben, aber was ich genau meine ist, dass es noch optimiert werden soll.
    Und zwar liegt eine beliebige txt vor, in der ein beliebiger text geschrieben ist. Die Texte sind ja oft in verschiedenen Abschnitten (oben Absatz genannt), die durch eine Leerzeile getrennt sind.

    Das Programm soll erkennen, welche Abschnitte durch eine Leerzeile getrennt sind und diese einzeln wiedergeben.

    Angenommen dieser Post wäre die besagte txt, dann müsste die Konsole erst folgenden Teil wiedergeben:

    Also das klappt alles schon wie ich das geschrieben habe oben, aber was ich genau meine ist, dass es noch optimiert werden soll.
    Und zwar liegt eine beliebige txt vor, in der ein beliebiger text geschrieben ist. Die Texte sind ja oft in verschiedenen Abschnitten (oben Absatz genannt), die durch eine Leerzeile getrennt sind.


    Anschließend durch drücken der Entertaste müsste dan folgendes wiedergegeben werden:

    Das Programm soll erkennen, welche Abschnitte durch eine Leerzeile getrennt sind und diese einzeln wiedergeben.



    Das Problem bei der Erstellung des Codes liegt glaube ich dabei, dass es verschiedene txts sind, und die haben dann unterschiedliche Längen in den Abschnitten. Bin mir nicht sicher ob das mit einfachen Mitteln umsetzbar ist, aber bin froh über jeden Vorschlag. Gruß
    Geht bestimmt noch cleverer, aber für den Anfang:

    VB.NET-Quellcode

    1. Dim FileLines = IO.File.ReadAllLines(Dateipfad)
    2. Dim TextParts As New List(Of List(Of String))
    3. Dim CurrentTextPart = New List(Of String)
    4. For Each Line In FileLines
    5. If String.IsNullOrEmpty(Line) Then
    6. If CurrentTextPart.Any Then TextParts.Add(CurrentTextPart) '- falls 2 Leerzeilen ignoriert werden sollen
    7. 'TextParts.Add(CurrentTextPart) - falls 2 Leerzeilen als 1 leerer Absatz gelten sollen
    8. CurrentTextPart = New List(Of String)
    9. Else
    10. CurrentTextPart.Add(Line)
    11. End If
    12. Next
    13. If CurrentTextPart.Any Then TextParts.Add(CurrentTextPart)
    14. 'und in TextParts sind dann eben Deine Abschnitte drin, die Du portionsweise in der Konsole ausgeben kannst
    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.

    Visual_Prog schrieb:

    Moving Target.
    Das Programm soll erkennen, welche Abschnitte durch eine Leerzeile getrennt sind und diese einzeln wiedergeben.
    Fang an mit einer vollständigen belastbaren Aufgabenstellung.
    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! hier das ganze auf c#:

    C#-Quellcode

    1. {
    2. var FileLines = File.ReadAllLines(Dateipfad);
    3. var TextParts = new List<List<string>>();
    4. var CurrentTextPart = new List<string>();
    5. foreach (var Line in FileLines)
    6. {
    7. if (string.IsNullOrEmpty(Line))
    8. {
    9. if (CurrentTextPart.Any())
    10. TextParts.Add(CurrentTextPart); // - falls 2 Leerzeilen ignoriert werden sollen
    11. //
    12. TextParts.Add(CurrentTextPart) - falls 2 Leerzeilen als 1 leerer Absatz
    13. gelten sollen
    14. CurrentTextPart = new List<string>();
    15. }
    16. else
    17. {
    18. CurrentTextPart.Add(Line);
    19. }
    20. }
    21. if (CurrentTextPart.Any())
    22. TextParts.Add(CurrentTextPart);
    23. }
    24. //zum ausgeben eine doppeltschleife:
    25. foreach (List<string> lst in TextParts)
    26. {
    27. foreach (string s in lst)
    28. {
    29. Console.WriteLine(s);
    30. }
    31. _auswahl2= Console.ReadLine();
    32. }


    Finde diesen Code sehr interessant:
    String.IsNullOrEmpty(Line) dient zum erkennen einer Leezeile, oder?
    Kann man sich die List(Of List(Of String)) ein wenig wie ein Baumdiagramm vorstellen?
    Die Methode .Any überprüft ob überhaupt was vorhanden ist. -> Gibt es eine äquivalente Methode bei Arrays?
    Zeil#13 ist etwas daneben gegangen, aber wurscht.

    Visual_Prog schrieb:

    String.IsNullOrEmpty(Line) dient zum erkennen einer Leezeile, oder?
    prüft einen String auf null/Nothing oder Leerstring (""), ja.
    List(Of List(Of String)) würd ich nicht mit einem Baum vergleichen. Weil: Ein Stamm hat x Hauptäste, jeder Hauptast hat y Unteräste, jeder Unterast hat z kleine Äste, … - Rekursion bis Ultimo möglich. Hier aber nicht.
    Diese List ist eher wie ein Buch:
    Ein Buch besteht aus vielen Seiten und jede Seite besteht aus vielen Textzeilen.
    Eine List(Of List(Of String)) besteht aus vielen List(Of String) und jede List(Of String) besteht aus vielen Strings.
    Ein Array kann implizit zu einem/einer(?) IEnumerable(Of T) gecastet werden. Und Any ist eine Extension dafür. Von daher: ja, ist letztenendes die selbe Extension für Array und List.
    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.

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