Erste Zeile in einer der Txt Datei löschen mit zeit

  • C#
  • .NET 5–6

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

    Erste Zeile in einer der Txt Datei löschen mit zeit

    Moin Leute,

    also mein Programm funktioniert ich wollte nur fragen ob ich das zu dumm gemacht hab scheint mir irgendwie ... aber vielleicht ist das auch so okay mal gucken also mein Programm ließt eine Txt datei aus mit einem Button lösche ich die erste Zeile von der Txt Datei und wenn dann in der ersten Zeile "test" steht soll die erste zeile nach 5 sekunden gelöscht werden.
    Aber wie gesagt es funktioniert aber vielleicht kann ich was besser machne ?

    Spoiler anzeigen

    C#-Quellcode

    1. public partial class MainWindow : Window
    2. {
    3. public string pathsr = @"C:\Users\test\testvsbediener.txt";
    4. private TimeSpan time_deltedfirstline;
    5. public MainWindow()
    6. {
    7. InitializeComponent();
    8. LoadData();
    9. }
    10. private void LoadData()
    11. {
    12. TextBox[] tb_all = { t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37 };
    13. StreamReader sr = new StreamReader(pathsr);
    14. for (int i = 0; i <tb_all.Length ; i++)
    15. {
    16. tb_all[i].Text = sr.ReadLine();
    17. }
    18. sr.Close();
    19. DispatcherTimer DeltedFirstLine = new DispatcherTimer();
    20. DeltedFirstLine.Stop();
    21. if (t0.Text == "test")
    22. {
    23. time_deltedfirstline = new TimeSpan(0, 0, 5);
    24. DeltedFirstLine.Interval = TimeSpan.FromSeconds(1);
    25. DeltedFirstLine.Tick += Time;
    26. DeltedFirstLine.Start();
    27. }
    28. else
    29. {
    30. DeltedFirstLine.Stop();
    31. }
    32. }
    33. public void Time(object sender, EventArgs a)
    34. {
    35. time_deltedfirstline = time_deltedfirstline.Subtract(TimeSpan.FromSeconds(1));
    36. if (time_deltedfirstline.TotalSeconds == 0)
    37. {
    38. var lines = File.ReadAllLines(pathsr);
    39. File.WriteAllLines(pathsr, lines.Skip(1).Take(lines.Length - 1));
    40. LoadData();
    41. }
    42. }
    43. private void btn0_Click(object sender, RoutedEventArgs e)
    44. {
    45. var lines =File.ReadAllLines(pathsr);
    46. File.WriteAllLines(pathsr,lines.Skip(1).Take(lines.Length - 1));
    47. LoadData();
    48. }
    49. }
    Find ich aus 2 Gründen schwierig zu beurteilen.
    1. Weil ich den Sinn hinter dem Unterfangen nicht verstehe.
    2. Weil Du ohne Punkt und Komma schreibst. Es ist (nicht nur) für mich extrem schwierig zu erkennen, wo welcher Teil der Aufgabe bzw. der Frage steht. Ich's hab's nach 4-maligem Lesen erfasst, aber es ist wohl mehr Hilfe zu erwarten, wenn Du entweder an den richtigen Stellen Punkt und Komma setzt. Oder einfach je einen kurzen Satz pro Zeile.
    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.
    okay mein Fehler @VaporiZed ich versuche es noch mal .
    Also mein Programm ließt am anfang einmal die TxT datei durch und füllt dann dann die ersten 37 Zeilen von der TxT datei in die Textboxen rein.
    Dann kontrolliere ich ob ich in der ersten Textbox "test" drin steht (Zeile 25) ist das der Fall soll ein Tick Event ausgelöst werden der nach 5 Sekunden die erste Zeile in der TxT datei löscht
    (das wäre dann die Funktion Time Zeile 38).
    Wenn das fertig ist startet er wieder die Funktion LoadData Zeile 45 und er ließt wieder die TxT Datei aus und alles rutsch halt ein höcher weil ja die erste Zeile gelöscht worden ist.

    ist das verständlicher ? :)
    @MrLaTuNiX Zerlege Dein Problem in disjunkte Teilprobleme, die Du alle einzeln in je einem neuen Projekt löst (Du kannst das!).
    Wenn sie alle zu Deiner Zufriedenheit gelöst sind, packst Du alle Teillösungen zu wiederum einem neuen Projekt zusammen.
    Z.B.
    - Text-Datei einlesen, die erste Zeile wegnehmen (.Skip()) und wieder speichern.
    - Timer starten, diesen nach 5 Sekunden wieder stoppen
    ...
    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!
    Wär mir etwas zu sehr Pfeil-Brust-Rücken-Auge.
    • Ich würd das nicht in 37 TextBoxen hauen, sondern einfach die ersten 37 Zeilen in eine ListBox. Aber warum überhaupt 37?
    • Ich würd keinen StreamReader verwenden, sondern IO.File.ReadAllLines (oder hast Du mehr als 10000 Zeilen?)
    • Ich würd keinen DispatcherTimer nehmen, sondern ein einfaches Timer-Control, welches ich passend einstelle und dann eben starte.
    Das ganze schmilzt den Code ein gutes Stück zusammen.
    Kapiert hab ich das Unterfangen trotzdem nicht. Warum sollte ich 5 Sekunden auf irgendwas warten und nicht entweder sofort automatisch weitergehen oder mit einen Klick des Users die nächste Aktion starten lassen?
    Warum nicht alle Zeilen einlesen und dann alle Test-Zeilen löschen? Klingt alles so, als ob hier nur die Spitze des Eisbergsalats erklärt wurde.
    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.
    An eine ListBox hab ich garnicht dran gedacht voll die gute Idee :)
    ich hab tatsächlich mehr als 10000 Zeilen :/
    und wie würde das mit dem Timer-Control aussehen ? ( kenne das nicht ...)
    ja das mit den 5 Sekunden war so von mir eingestellt nacher soll es erst in 10 minuten weggehen.(Also hab ich hab es zum testen gemacht)
    Es geht darum das Mitarbeiter nach der Liste arbeiten muss und immer wenn er halt den eien AUftrag fertig hat den löschen muss aber wenn da was bestimmtest steht in meinenn Fall jetzt "test" soll das erst nach 10 min weggehen und der mitarbeiter kann das nicht löschen :)
    und 37 Zeilen weil die nicht mehr sehen wollen also ist von denen gewollt :)

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

    Musst Du mal testen, ob es Performance-Einbußen mit dem IO.File.ReadAllLines gibt. Und um es bei 37 zu belassen, schreib: Dim DeineRelevantenDateizeilen = IO.File.ReadAllLines(DeinDateipfad).Take(37)
    Timer-Komponente kennste nicht? Der wird doch von vielen für alles (Un)mögliche hergenommen.
    Form-Designer -> Toolbox -> Komponenten -> Timer; Doppelklick drauf oder auf's Form ziehen, dann taucht das Teil unten rechts bei den Komponenten auf und heißt bis zu Umbenennung Timer1. Doppelklick drauf und Du kommst in den Tick-EventHandler, in dem festgelegt wird, was passieren soll, wenn der Timer sein Zeitintervall Intervall erreicht hat und dann mit der Zeit"zählung" automatisch von vorn anfängt. Dann eben im Designer bei den Timer-Eigenschaften das Interval einstellen (Angaben in Millisekunden, brauchst also bei 5 Minuten den Wert 300000) und wenn Du den Timer starten willst, dann eben im Code Timer1.Start. Stoppen kannst Du den mit - Überraschung, Überraschung - Timer1.Stop
    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.