Zeilenteil aus TXT löschen

Tucker

Erfahrenes Mitglied
Zur Zeit arbeite ichwie schon gesagt an einem Forum, welches Textdateibasiert ist. Jede Zeile entspricht einem Topic. Diese Zeile habe ich mit Hilfe von Trennzeichen (2 Ebenen) untergliedert.

Nun arbeite ich an der Funtion, einzelne Antworten zu löschen. Auf die txt bezogen wollte ich das wie folgt umsetzen. Ich lese alle Beiträge per explode in ein Arry ein. Im nächsten Schritt wollte ich mit unset den entsprechenden Datensatz löschen. Dies funtioniert allerdings leider nicht und ich weiß nicht warum.

Bitte helft mir.

Hier das Script:
PHP:
$datei=$_GET["forum"].".txt";
			$modus="w";
			
			$zeilen=file($datei);
			$anzahl=count($zeilen);
			
			$znr=$_GET["beitrag_id"];
			$anr=$_GET["thread_id"];
			
			$daten=explode("|+|", $zeilen[$znr]);
			
			unset($daten[$anr]);
			
			$string=implode("|+|", $daten);
			
			for ($i = 0; $i < $anzahl; $i ++)
			{
				$altstring=$zeilen[$znr];
				$zeilen[$znr]= str_replace($altsring, $string, $zeilen[$znr]);
			}
			
			$array=implode("", $zeilen);
			$fp =fopen($datei, $modus);
			fputs($fp, $array);
			fclose($fp);
			
			$meldung="Die Antwort wurde gelöscht.";
			$meldung=urlencode($meldung);
			ob_start();
			header ("Location: ../index.php?datei=index&pfad=forum&forum=".$_GET["forum"]."&beitrag_id=".$_GET["beitrag_id"]."&beitrag=".$_POST["titel"]."&meldung=".$meldung."");
			ob_end_flush();

thx
 
Lange Rede kurzer Sinn, bei Dateien kann man nur folgendes machen:

Beispielscript:
(Datei 1.txt muss man noch anlegen und mit Daten füllen um den Testzweck zu erfüllen)
PHP:
<?php

if(isset($edit)) {

	$file = file("1.txt", "r");
	$array_file = array();

	$i = 0;
	foreach($file as $key => $value) {
		$i++;
		if($i == $k) { $array_file[$i] = $v."\n"; }
		else { $array_file[$i] = $value; }
	}

	$file = fopen("1.txt", "w");

	foreach($array_file as $value) {
		$value = $value;
		fwrite($file, $value);
	}
	fclose($file);
}
?>
<html>
<title>dateiupdate</title>
<head>
</head>
<body>
<table width="100%" cellspacing="0" cellpadding="4" border="0">
<tr><td>
<?php
$i = 0;
$inhalt = file("1.txt", "a+");
foreach($inhalt as $v) {
	$i++;
	echo "<form action=\"".$PHP_SELF."\" method=\"post\" name=\"edit\">
			<input type=\"text\" name=\"inhalt[$i]\" value=\"$v\">
			<input type=\"submit\" value=\"ok\" name=\"edit\"></form><br>";
}
?>
</td></tr></table>
</body></html>
 
Sehe bei deinem Script nicht durch. Kannst du mir nicht einfach sagen, an welcher Stelle bei mir im Script ein Fehler ist? Dann könnte ich daran weiter arbeiten und müsste nicht völllig umdenken.

thx
 
***ACHTUNG man zählt ab Null los
Die erste Zeile ist also Zeile 0
Die zweite Zeile 1 ....

Der Weg ist folgender
PHP:
$delzeile = ""; // Welche Zeile soll gelöscht werden?
$datei = file("1.txt"); 
// $datei wird mit dem Zeileninhalt der txt als Array erzeugt
// $datei[0] gibt zb Die erste Zeile aus usw...
{
for($i=0;$i<count($datei) + 1; $i++) //For Schleife wird erzeugt der Wert $i wir so lange erhöht bis der Wert gleich der Zeilen ist
{
if ($i != $delzeile) { // Wenn nicht die zulöschende Zeile dran ist
$neuetextdatei="$neuetextdatei$datei[$i]\n"; // wird in diese Variable alle alten 
// Zeilen eingegeben und somit die zulöschende Zeile entfernt.
}
}
}

// Öffnet jetzt die Datei zum überschreiben und schreibt den Wert in diese Datei

Ist doch nicht so schwer oder? - Oder nochmal zu Wort melden
 
Zuletzt bearbeitet von einem Moderator:
Na das ist klar. Das auch super. Allerdings hast du mich nicht genau verstanden, oder ich hab es ungenau umschrieben.

Ich habe eine Zeile mit verschiedenen Daten, welche durch ein Trennzeichen gtrennt sind. will nun aus dieser Zeile einen bestimmten Datensatz löschen, nicht die ganze Zeile, sondern nur einen Datensatz, welche durch Trennzeichen definiert ist und somit an einer bestimmten Stelle der Zeile steht.

Das wollte ich mit dem oben angegebenen Script lösen. Ich habe die Daten per explode in ein Arry geladen und habe wollte dann einen Datensatz des Arrays mit unset löschen. Im nächsten Schritt wollte ich die alte Zeile durch die dadurch neu Entstandene überschreiben.
 
ok das gleiche Prinzip

Text auslesen und euner Variable zuweisen Bsp $text

$diesenbereichloeschen=""; //Welchen Eintrag loeschen
$diesenworteintragloeschen=""; //Oder welchen Text
$zeilen=explode('Deinzeichen',$text);

$alle_zeilen=count($zeilen);

for($i=0; $i<$alle_zeilen;$i++){
if ($i == $diesenbereichloeschen or $zeilen[$i] =="$diesenworteintragloeschen")
{} else { $neuevariable="$neuevariable$zeilen[$i]DEINZEICHEN "; }
}

Und die Variaqble jetzt in die txt schreiben

Habs nicht getestet aber sollte gehen, wenn nicht PN oder E-Mail
 
Zurück