Datensatz in Datei mit wahlfreiem Zugriff (Random Access) löschen, wie?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von billy5.

    Datensatz in Datei mit wahlfreiem Zugriff (Random Access) löschen, wie?

    Hallo allerseits,

    als Newcomer möchte ich euch begrüßen.
    In Sachen VB.NET schlage ich mich gerade mit einem Problem herum, um dessen Lösung ich euch um Hilfe bitten möchte.
    Problem: Ich habe eine Datei mit wahlfreiem Zugriff generiert FileOpen(1, "data_test.txt", OpenMode.Random), deren Daten in einer Listbox zunächst eingeben werden. Mit
    FilePutObject(1, p.Merge(), NumSchreiben.Value) schreibe ich die Daten in die Datei bzw. mit FileGetObject(1, s) lese ich die Daten aus der Datei in eine Listbox ein.

    Meine Datenstruktur sieht beispielhaft wie folgt aus:

    Datensatz1: Maier#Josef#100#55
    Datensatz2: Kanters#Fritz#20#16
    Datensatz3: Duffi#Heinz#18#17

    Neue Datensätze per Merge anzuhängen bereitet keine Probleme.

    Trotz intensiver Suche ist es mit bisher nicht gelungen, einen beliebigen Datensatz aus der Datei zu löschen! Wie ist das zu bewerkstelligen?

    Danke vorab für hilfreiche Antworten.

    Gruß
    billy5 :?:
    Willkommen im Forum.
    FileOpen? FilePutObject? Das sind Teile des VB6-Microsoft.VisualBasic-Namespaces. Vereinfache Dir das Leben und nutze stattdessen IO.File.ReadAllLines und IO.File.WriteAllLines. Damit liest Du eine Datei vollständig aus bzw. beschreibst sie vollständig. Oder welchen Vorteil siehst Du in Deiner Methode?
    Mein Vorschlag: Zu Beginn des Programms alles mit ReadAllLines auslesen und in die ListBox rein (btw: ListBox? Sicher, dass dieses CE adäquat für Deine Aufgaben ist?), dann die Einträge modifizieren und per WriteAllLines zurück in die Datei. Damit ersparst Du Dir den Teil mit »einen beliebigen Datensatz aus der Datei zu löschen«, da alles im Programm bzw. in der ListBox bearbeitet wird.
    Später ggf. mit tDS, DataTables und XML arbeiten, aber soweit sind wir noch nicht.
    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.
    Hallo vaporiZed,

    danke für deine schnelle Rückmeldung. Mein Prog ist eine Modifizierung eines Beispiels aus einem aktuellen Schmöker "Einstieg in VB 2017".
    Ich sehe den Vorteil der Randomisierung in dem relativ schnellen beliebigen Zugriff auf einen Datensatz. Dabei muss ich keine komplette
    Datei einlesen, redigieren und zurück schreiben. (Es sei dahingestellt, ob ich einen Geschwindigkeitsnachteil bei vielleicht 100 - 200 Datensätzen hätte). Mich hat überrascht, dass VB bzw. VB.Net anscheinend keinen Löschbefehl für mein Prob greifbar hat. Weil es unlogisch für mich erscheint.
    Möglicherweise haben andere Mitglieder des Forums noch andere Ansätze.

    Gruß
    billy5
    Wenn in dem Buch wirklich so ein Ranz drinnen steht, dann wirf es weit, weit weg.
    Lies hier im Forum erst mal:
    vb-paradise.de/index.php/Board/933-Allgemeines/
    und besonders: Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen

    Warum sollten andere Mitglieder des Forums noch andere Ansätze haben? Du kannst eine Datei nicht ändern ohne sie einzulesen und neu zu schreiben. Somit kann es auch keinen "Löschbefehl" für eine Zeile in einer Textdatei geben.
    @VaporiZed hat Dir bereits alles an Hilfe zukommen lassen was "geht". Er hätte Dir nur noch zusätzlich sagen können, dass Du den alten VB6 Ranz rausschmeissen sollst.
    Sicherlich kann man da auch was mit einem Read&Write-FileStream machen, da können u.a. bestimmt @MrTrebron und @Bluespide was dazu sagen, denn da fällt mir ein Thread ab einem gewissen Post ein. Obwohl ich gerade sehe, dass da meine letzten Fragen an die beiden damals noch gar nicht beantwortet wurden. Na wurscht, war eh nicht mein Thread.
    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.