Immer in die erste Zeile einer Text-Datei schreiben

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Immer in die erste Zeile einer Text-Datei schreiben

    Guten Morgen,

    ich hab noch ein kleines Problem. Ich möchte per Live-Ticker Probleme angezeigt bekommen. Also wenn ein User ein Problem hat, dann gibt er es ein, das wird in eine txt-datei geschrieben und bei mir im Interface aktualisiert er alle 15Minuten das einlesen der datei.
    Soweit so gut, wäre da nicht das Problem, dass VB scheinbar neue Meldungen immer unter die letzte schreibt. Das ist aber blöd, weil ich mich dann einfach dumm und dämlich suche. Schön wäre es, wenn er die aktuellste Meldung immer in die erste Zeile schreibt, bzw. soll das so aussehen:

    01.04.2014 13:47:02 Betreff
    Störungsmeldung

    Nun liest er die erste Zeile aus und packt das bei meinem Interface in eine Listbox und wenn ich das Feld anklicke zieht er sich die Störungsmeldung. Also möchte ich im Endeffekt einfach überprüfen, ob der erste Eintrag zwischen 13:45 und 14:00 liegt, wenn ja, dann add in listbox und prüfen, ob der nächste eintrag auch in dem Zeitfenster liegt etc. Wenn nicht, dann wird die Anfrage beendet und startet nach 15 Minuten erneut.

    Ist es möglich ohne ein Array das so hinzubiegen, dass VB die neuen Meldungen an erste Stelle schreibt? Weil ich finde, dass ein Array den Code nur unnötig komplex macht, wenn nicht anders geht, dann muss das wohl so, aber schön wäre es einfach, wenn vb einfach so in die erste Zeile springen kann und ohne dass der bisherige Inhalt überschrieben wird, sondern einfach nach unten verschoben wird^^
    lg

    Kiste schrieb:

    soll das so aussehen:
    So:

    VB.NET-Quellcode

    1. Private zahl As Integer = 0
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Me.ListBox1.Items.Insert(0, zahl)
    4. zahl += 1
    5. End Sub
    Wenn das in eine Datei soll, musst Du die ganze Datei umschreiben, da gibt es kein Einfügen.
    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!
    Nee, nicht die ListedBox-Einträge sollen in die Datei, die Einträge aus der Datei sollen in die ListedBox.
    Sprich User A gibt etwas in Textfeld X ein und drückt Button Y. Nun soll der geschriebene Text in die Textdatei geschrieben werden und bei mir in meinem Interface ausgelesen werden. Und das Auslesen und Schreiben ist an sich nicht das Problem. Nur, dass der Text eben immer angereiht wird.

    Ich möchte es, dass es so aussieht:

    01.04 13:47 Betreff
    Störmeldung

    01.04. 13:46 Betreff
    Störmeldung

    01.04. 08:12 Betreff
    Störmeldung

    etc.
    --
    Momentan sieht es aber leider so aus:

    01.04 08:12 Betreff
    Störmeldung

    01.04. 13:46 Betreff
    Störmeldung

    01.04. 13:47 Betreff
    Störmeldung

    etc.

    Kiste schrieb:

    Nee, nicht die ListedBox-Einträge sollen in die Datei, die Einträge aus der Datei sollen in die ListedBox.
    Dann stell mal Dein Konzept um, dann klappt es mit der Datei auch besser.
    Mach eine List(Of String) mit allen Einträgen, der kannst Du vorn Einträge einfügen, diese zeigst Du in Deiner ListBox an und die kannst Du einfach abspeichern:

    VB.NET-Quellcode

    1. Private zahl As Integer = 0
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. zahl += 1
    4. Dim ll As New List(Of String)
    5. ll.Insert(0, "Eintrag " & zahl.ToString)
    6. Me.ListBox1.Items.AddRange(ll.ToArray)
    7. IO.File.WriteAllLines("DEIN_PFAD", ll.ToArray())
    8. End Sub
    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!
    Aber erfordert das nicht schon, dass im Eingabeprogramm eine Listbox ist? Die gibt es für die User aber nicht, da muss ich mich leider an das halten, was man mir vorschreibt^^
    Die Listbox gibts nur für die Administratoren^^

    Kiste schrieb:

    eine Listbox
    Dann kommentiere Zeile 6 in meinem Code aus.
    ----
    Poste bitte mal die exakte 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!

    Kiste schrieb:

    Die Listbox gibts nur für die Administratoren
    Mal darüber nachgedacht, dass eine Listbox immer da sein kann, nur nicht für alle sichtbar?

    Wie @RodFromGermany schon schrieb, solltest du vielleicht mal die komplette Aufgabenstellung schildern.
    Ich habe nämlich das Gefühl, dass du die Trennung von GUI und Daten ziemlich lose handhabst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Aaaalso, die "Aufgabenstellung" lautet wie folgt:

    Um den Alltag zu erleichtern und damit nicht jeder User immer anruft, soll das ganze durch das Programm abgefangen werden.
    Im Programm gibt es dann verschiedene Kategorien, die der User auswählen kann, zB. Programme -> Word. Dann kann er die Störung eintippen und absenden.
    Erst sollte das ganze per Mail an uns geschickt werden, das wurde aber nun geändert und es soll in eine txt und csv-Datei geschrieben werden. Die Daten des Users sollen in zwei Zeilen geschrieben werden. In der ersten Zeile Datum, Uhrzeit, user, Betreff und in der zweiten Zeile die Störungsmeldung.
    Mit einem zweiten Tool soll die txt-Datei nun viertelstündlich überprüft werden und alle neuen Werte in die listbox hinzufügen. Wobei die listbox erstmal nur ein Vorschlag war (falls es da bessere alternativen für so etwas gibt, nehm ich die gerne an). Bis zu 50 Störungen sollen im Programm eingelesen werden, wenn die 50 voll sind, die ältesten raus, die neusten rein. Nun soll es aber so sein, dass die neusten Störmeldungen in der Text-Datei oben stehen, zum besseren auslesen, weil es einfach keinen Sinn macht erst 1000 Zeilen auszulesen, um zu überprüfen, ob etwas neues hinzugekommen ist. Vom Admin-Tool aus soll nichts in die Datei geschrieben werden, also keine Werte aus der listbox IN die textdatei.

    Visual Basic-Quellcode

    1. ​My.Computer.FileSystem.WriteAllText("Mein Datei-Pfad",
    2. datum + uhr + User + betreff + & vbNewLine + text, True)


    Mit dem Befehl schreibe ich die Werte in die Text-Datei, aber er schreibt so halt immer nur in eine neue Zeile und nicht in die erste Zeile :/

    Kiste schrieb:

    und nicht in die erste Zeile

    RodFromGermany schrieb:

    Wenn das in eine Datei soll, musst Du die ganze Datei umschreiben, da gibt es kein Einfügen.
    Lies die Datei in ein String-Array.
    Konvertiere das Array in eine List(Of String).
    Füge dort wie oben gezeigt, vorn den neuen Text ein.
    Speichere die List als Array in eine Datei.
    Feddich.
    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!
    Es wurde jetzt nochmal etwas modifziert und vor allem auch vereinfacht (ich hätte da eiinfach schneller drauf kommen sollen). Ich hab das ganze jetzt in eine DataGridView gepackt, damit kann ich die Sachen sortieren, wie ich will und ich bin glücklich.
    Jetzt habe ich nur noch eine Frage, ich habe in die Tabelle eine Checkbox eingefügt und möchte nun, dass das Programm erkennt, wenn die Checkbox angeklickt ist, das die gesamte Zeile bearbeitet ist und am liebsten farblich hinterlegt.
    Das Problem, was ich habe ist, dass ich gerade nicht weiß, wie ich eine bestimmte Zelle automatisch überprüfen kann.
    Also wenn Checkbox von Zeile 3=AN, dann Zeile 3 grün machen.
    Geht das irgendwie relativ simpel? :)

    Kiste schrieb:

    Im Programm gibt es dann verschiedene Kategorien, die der User auswählen kann, zB. Programme -> Word. Dann kann er die Störung eintippen und absenden.
    Da besteht datenbänkerisch gesehen eine 1:n - Relation.
    Es böte sich also ein Joining-view an, bei dem der User per Combobox auswählt, in welche Kategorie die Meldung soll.

    vlt guckst du dir in aller Ruhe mal die vier Views-Videos an - das wäre eine Art Standard-Vorgehensweise - naja, jdfs das Instrumentarium dazu wird vorgeführt.

    Wenn du dich dann entschließt, typisiertes Dataset zu verwenden - da generiert der Form-Designer automatisch CheckboxColumns, wenn eine Datenspalte Typ Boolean hat.
    Auch das Colorieren von Datensätzen ist bei diesem Standard bereits mit angelegt: coloriertes DatagridView