Zeilen aus file löschen

Hallo!

Ich möchte aus einem .txt oder auch .xml File eine bestimmte Anzahl von Zeilen
_am Anfang_ herauslöschen und weiß leider nicht, welche Funktion ich dazu
verwenden kann - bisher hab ich es mit einem temporären File gelöst - also hin
und her speichern was ich später noch haben will und was nicht - nur wird mein
Output jetzt immer größer und somit auch die Laufzeit :frowning:

Wäre wirklich dankbar für Tipps

Ich möchte aus einem .txt oder auch .xml File eine bestimmte
Anzahl von Zeilen
_am Anfang_ herauslöschen und weiß leider nicht, welche
Funktion ich dazu
verwenden kann - bisher hab ich es mit einem temporären File
gelöst - also hin
und her speichern was ich später noch haben will und was nicht

Da wirst du wohl kaum drumherum kommen. Die Datei muss bei Löschvorgängen am Anfang auf jeden Fall komplett neu geschrieben werden, du kannst lediglich den Vorgang ein wenig optimieren. Der naive Ansatz sollte recht gut funktionieren, sprich: Eingabedatei und eine temporäre Datei öffnen, dann Zeile für Zeile aus der Eingabe lesen und bei n zu überspringenden Zeilen ab der (n+1)ten in die temporäre schreiben. Danach beide Dateien schließen, die Eingabe löschen und die temporäre Datei auf den ursprünglichen Namen der Eingabe umbenennen. Die Pufferung des Dateisystems sollte das recht zügig ablaufen lassen.

Bei XML solltest du in Betracht ziehen, über die Zugriffs-Bibliothek die Eingabe lesend und eine temporäre Datei schreibend zu öffnen und dann eine gewisse Anzahl von Elementen statt Zeilen auslassen.

Danke mal recht herzlich für die Antwort!

Ich möchte aus einem .txt oder auch .xml File eine bestimmte
Anzahl von Zeilen
_am Anfang_ herauslöschen und weiß leider nicht, welche
Funktion ich dazu
verwenden kann - bisher hab ich es mit einem temporären File
gelöst - also hin
und her speichern was ich später noch haben will und was nicht

Da wirst du wohl kaum drumherum kommen. Die Datei muss bei
Löschvorgängen am Anfang auf jeden Fall komplett neu
geschrieben werden, du kannst lediglich den Vorgang ein wenig
optimieren. Der naive Ansatz sollte recht gut funktionieren,
sprich: Eingabedatei und eine temporäre Datei öffnen, dann
Zeile für Zeile aus der Eingabe lesen und bei n zu
überspringenden Zeilen ab der (n+1)ten in die temporäre
schreiben. Danach beide Dateien schließen, die Eingabe löschen
und die temporäre Datei auf den ursprünglichen Namen der
Eingabe umbenennen. Die Pufferung des Dateisystems sollte das
recht zügig ablaufen lassen.

Genauso hab ich es *leider* eh implementiert, ich fürchte nur um meine
Laufzeit, wenn die Files mal so an die 20.000 Zeilen erreichen, vor allem, da
ich das ganze durch einen Parser jage und somit ca. alle 10 Zeilen ein neues
File geschrieben werden muss.

Habe gehofft es gibt einen Laufzeit-freundlicheren Weg, aber wenn nicht kann
ich auch nix machen. :smile:

Hallo
Also erstmal, ich habe VB und etwas Assembler Kenntnisse.
Wenn auf Deinem System der Ram-Speicher zu klein wird, dann bekommst Du Zeitprobleme mit temporären Dateien, weil diese dann nicht mehr temporär gehalten werden können,
mal ganz davon abgesehen, das in Deinem Code etwas optimierbares sein kann.
Falls Du wirklich nur am Anfang Zeilen entfernen möchtest, dann kannst Du ohne temporäres File die Zeilen, die Du behalten willst, in die alte Datei schreiben, und das dann kleinere Dateiende mit der API-Funktion „SetEndOfFile“(kann auch anders heißen) neu einstellen.

Hierbei könnte man noch temporäre Dateizeiger abspeichern, falls man eine Möglichkeit für eine Restaurierung der Daten bei Stromausfall halten möchte.

Wird die Datei ständig geändert, würde ich die Ursprungsdatei temporär machen, und auch dort wieder hineinschreiben.

MfG
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]