Zeilenvorschub bei letzter Zeile entfernen

Schwammerl

Mitglied
Hallo,

ich sitze schon seit Vorgestern an dem Problem, das ich beim löschen der letzten zeile aus einer Textdatei den blöden Zeilenvorschub nicht weg bekomme. Muß dazu sagen, das ich diese Form der Datei das erste mal anwende.
Die Datei schaut am Anfang zB so aus:

erste|zeile|der|datei\n
zweite|zeile|der|datei\n
dritte|zeile|der|datei

\n dient nur zur Ansicht wo ich beim speichern der Datei den zeilenumbruch mache.
Wenn sie nach dem löschen so ausschaut hab ich das Problem:

erste|zeile|der|datei\n
zweite|zeile|der|datei\n

Jede Zeile hat doch am Ende den Zeilenvorschub. Wenn ich aber die letzte Zeile lösche, behält die vorletzte den Zeilenvorschub und ich bekomm in meiner Auflistung immer eine leere Zeile.
Wie löse ich das Problem?

PHP:
<?php
session_start();
$message    = $_SESSION["message"];
$benutzer      =$_SESSION["benutzer"];

//---------------------Config Daten -------------------- 
$log = "warenkorb/$benutzer.dat";

//$log =  "$benutzer.dat"; 
$fp = fopen($log,"r"); 
$array = file($log); 
$anzahl = count($array); 
$id = $position-1; // kommt vom der Warenkob Artikel Position
$nl = chr(13).chr(10);
//---------------- Anfang der zu löschenden Datei ----------------- 

  
   if ($anzahl == 0){ 
   echo"Konnte keinen Eintrag loeschen!"; 
    
   }else{ 
         
        $zeile = $id; 
// Ab hier Loeschcode 
If ($anzahl <= $zeile){ 
echo"Eintrag nicht vorhanden!"; 
}else{ 

unset($array[$zeile]); 
$newinhalt = fopen($log,"w"); 
fputs($newinhalt,implode("",$array));
fclose($newinhalt); 
$_SESSION["message"] = "Der Eintrag "$newinhalt" wurde gelöscht.";
header("Location: shopstart.php?a=waren");
exit; 
} 
} 
?>

So sieht der Code bei mir aus. Die Zeilen vor der letzten zu löschen sind kein Problem.
Aber bei der letzten, da ja die vorletzte den blöden Zeilenvorschub hat.
Gruß
Schwammerl
 
Hallo Schwammerl

ich verstehe nicht so ganz warum die jede zeile mit dem /n beendest.
lese doch einfach jede zeile aus und sag das sie jeweils in eine neue zeile eingefügt wird. also dann scheibst einfach sollch einen text

erste|zeile|der|datei
zweite|zeile|der|datei
dritte|zeile|der|datei

ohne das /n

dann hast auch kein problem mehr beim löschen der letzten zeile.
ich finde gerade nur kein beispiel auf die schnelle.
bei abspeichern kannst du ja sagen das er immer eine neue zeile schreiben soll ohne das /n

ich schau doch nach einem bsp. in Gästebüchern auf txt basis wird sowas fast immer angewendet.

MFG Walemann
 
Hallo,

das \n ist ja auch nur zur Veranschaulichung da. die Datei schaut im Editor so aus.

erste|zeile|der|datei
zweite|zeile|der|datei
dritte|zeile|der|datei

Anders bekomme ich die zeilen ja nicht untereinander als wie wenn ich beim speichern
Chr(13) und Chr(10) eingebe.

Ja, schau mal bitte nach. Ich hab wirklich keinen Peil mehr.

Gruß
Alex
 
Hallo,

das hab ich schon probiert. Blos dann ist alles weg.
Ich weis einfach nicht wie ich es machen soll.
Denn die leere Zeile die gelöscht werden soll wird ja erst gelöscht wenn sie wieder abgespeichert wird.

könntest Du mir das nicht umschreiben das es ?

Danke.

Gruß
Schwammerl
 
Hier ein Beispiel zum Löschen einer bestimmten Zeile in einer Textdatei:
PHP:
<?
//zu löschende Zeile, beginnend bei 0
$del=4;

//Zeilenumbruch (nur zum schreiben)
$lb = "\r\n";

//zu bearbeitende Textdatei
$fname = 'Textdatei.txt';

$c = file_get_contents($fname);
$r = preg_split("/(\r\n|\r|\n)/",$c);
unset($r[$del]);
$nc = implode($lb,$r);
$f = fopen($fname,"w");
$b = fputs($f,$nc);
if ($b===false) {
    echo "Fehler beim schreiben.<br>\n";
} else {
    echo $b." Bytes geschrieben.";
}
fclose($f);
?>
Gruß hpvw
 
Hallo,

jetzt hab ich aber noch ein Problem.
Wenn ich den letzten Datensatz aus der Datei lösche sollte er mir die Datei ganz löschen.

Wie mach ich das ?

Hab es schon probiert mit @unlink aber es irgend wie nicht.

Gruß
Schwammerl
 
Dann nimm das @ mal weg, damit Du ggf. eine Fehlermeldung erhältst.

Vielleicht hilft Dir ja auch der Hinweis in den Kommentaren in der Funktionsreferenz zu [phpf]unlink[/phpf].

Gruß hpvw
 
Hallo,

wenn ich bei Deinem Beispiel nach fclose($f) dann
PHP:
if ($b<=0){          // brauch ich ja um zu schauen ob die Datei leer ist
 unlink("$log");    // $log ist der Pfad mit Datei
}
schreibe bringt er mir Permission denied.
Wie so eigentlich? Hab doch die Datei oben geschlossen.

Gruß
Schwammerl
 
Zurück