n-te zeile aus einer txt datei löschen

Nucleus

Erfahrenes Mitglied
Hi leuts also nen
code habe ich schon geschrieben mein problem ist das er Abstände oder zeichen hineinschreibt -> was kann man dagegen machen oder weiß jemand eine lösung ?


<?

$daten="test.txt";
$zeile = 5;
$myarray=file($daten);
unset ($myarray[$zeile]);
$fh = fopen($daten, "w");


fwrite($fh, implode("\n\r", $myarray));



fclose($fh);





?>
 
hatte mal das gleiche Problem (glaub ich zumindes ich werd aus deiner beschreibung nicht so richtig schlau:-) )
ich glaube unset löscht das element nicht wirklich sondern lehrt es nur..
probiers mal mit array_slice()
PHP:
<?
$daten="test.txt";
$zeile = 5;
$myarray=file($daten);
$gelöschte_Zeile = array_slice($myarray,$zeile-1,$zeile);
$fh = fopen($daten, "w");
fwrite($fh, implode("\n\r", $myarray));
fclose($fh);
?>
 
@ Tob: Da kann ich dir leider nicht recht geben - unset löscht das Element. Kann gerne meine erste Delete Funktion posten, wenn du mir nicht glaubst ;)

Grüße, Morph
 
@morph

ich glaube unset löscht das element nicht....
und der glaube versetzt schließlich auch Berge....:-)
vieleicht sollte ich das manual als nicht nur überfliegen :-)
aber wo liegt dann das Problem im Script von Nucleus ?

tob
 
Hm wenn ich das richtig sehe, dann sieht nucleus' "array" nach dem unset so aus:
$myarray[0]
$myarray[1]
$myarray[2]
$myarray[3]
$myarray[4]
$myarray[6]
und da könnte das problem liegen - versuch mal in ner schleife z.b. den inhalt von $myarray[6] auf 5 zu schreiben, den von $myarray[7] auf 6 usw und das letzte indiez im array löschste dann einfach ... naja schwer zu erklären. ich poste einfach mal meine delete funktion ... vielleicht versteht ihr dann was ich meine :-)
PHP:
$index_open = fopen("./news_dat/index_news.dat", "r");
		$index_read = fread($index_open, filesize("./news_dat/index_news.dat"));
		$index = explode("||", $index_read);
		fclose($index_open);
		$count = count($index);
		
		$z1 = 0;
		$z2 = 1;
		while ($z2 <= $count) {
			if ($index[$z1] != $delete) {
			} else {
				unset($index[$z1]);
			}
		$z1++;
		$z2++;
		}
		
		$z1 = 1;
		$z2 = 0;
		while ($z1 <= $count) {
			if((!isset($index[$z2])) AND ($z2 < $count)) {
				$z2++;
				$new_index[] = $index[$z2];
				$count--;
			} else {
				$new_index[] = $index[$z2];
			}
			$z1++;
			$z2++;
		}

		$count2 = count($new_index);
		$count2--;

		if ($new_index[$count2] == "") {
			unset ($new_index[$count2]);
		} else { }

		$count2 = count($new_index);
		$z3 = 0;
		$z4 = 1;

		unlink("./news_dat/index_news.dat");
		
		if (!file_exists("./news_dat/index_news.dat")) {
			$write = "";

		while ($z4 <= $count2) {
			
			if ($z4 < $count2) {
				$write .= $new_index[$z3]."||";
			} elseif ($z4 == $count2) {
				$write .= $new_index[$z3];
			} else {
				echo "Error on Line #53 - Please contact the Administrator.";
			}
		
		$z3++;
		$z4++;
		}
		}
		
		$news_index = fopen("./news_dat/index_news.dat", "w+");
		fwrite($news_index, $write);
		fclose($news_index);

		unlink("./news_dat/$delete");
Grüße, Morph
 
wenn ich das richtig sehe ist das genau das was array_slice macht ....
aber warum einfach wenns auch kompliziert geht :]

tob
 
Danke für eure antworten habe meinen fehler schon gefunden ->
danke morph, das mit dem array ordnen werde ich mir auch noch anschauen.
Tob, danke für deine Hilfe

Weiß jemand warum die funktion unlink bei mir auf den rechner nicht geht ?


PHP:
<? 

$daten="test.txt"; 
$zeile = 10; 
$myarray=file($daten); 
unset ($myarray[$zeile]); 
$fh = fopen($daten, "w"); 


fwrite($fh, implode("", $myarray)); 
fclose($fh); 

?>



Thx to All
 
@Nucleus: Wenn man sich so die Kommentare zur Beschreibung von unlink auf www.php.net ansieht, merkt man, dass unlink unter Win32 Probleme macht. Teilweise wird gemeldet, es funktioniere mit Windows NT/2000, andererseits wieder nicht. Aber ich glaube herausgelesen zu haben, dass ab PHP 4.1.1 diese Probleme auf Win32-Plattformen verschwinden. Also einfach mal updaten, und nochmal probieren, kann ja nicht schaden ;)
 

Neue Beiträge

Zurück