Sönke Tesch: Newbie braucht Hilfe !!!

Beitrag lesen

Es geht um folgendes. Ich habe eine txt Datei mit Adressdaten, diese möchte ich ändern bzw. löschen können.
Hab zu dem Thema was bei http://www.koehntopp.de/ gefunden, aber leider funktiniert das nicht so wie ichs mir vorstelle.Die Daten werden zum Ändern aufgerufen und auch neu geschrieben, das geht aber alles nur EINMAL. Danach wird eine ganz andere Zeile gelöscht und die zu ändernde wird immer hin ran gehangen.

Du hast da ein konzeptionelles Problem: Du vergleichst nicht die Nummer eines Datensatzes (die du ja mit $ID am Anfang jeder Zeile stehen hast), sondern die Zeilennummer aus deinem Zähler $no.
Sowas kann leicht in's Auge gehen, insbesondere, wenn man dann den geänderten Datensatz an's Ende anhängt, anstatt ihn wieder in die Zeile zu schreiben, in der er ursprünglich mal war.

Ausgangsdatei:

Zeile  Daten
1      1 Ernie
2      2 Bert
3      3 Grobi
4      4 Krümelmonster

Wenn du jetzt Eintrag 2 änderst, bekommst du:

Zeile  Daten
1      1 Ernie
2      3 Grobi
3      4 Krümelmonster
4      2 Bert

Dein Datensatz 2 (Bert) ist also in die letzte Zeile gerutscht. Wenn du jetzt nochmal durchläufst, erwischt du statt Datensatz 2 (Bert) Zeile 2, an der jetzt Datensatz 3 (Grobi) steht.

Lösung: Lies aus jeder Zeile die Nummer des Datensatzes aus und vergleiche die. Oder ersetze dein "continue;" in der Schleife durch "$line=$str;", um an die Position der alten Datenzeile die geänderte zu schreiben.
Da du jetzt schon über den Fehler, sich auf Umwege zu verlassen, gestolpert bist, würde ich dir ersteres empfehlen.

Gruß,
  soenk.e

PS: Dateien sind tote Objekte, die kann man nicht locken ;)