18. april 2009 - 14:51Der er
11 kommentarer og 1 løsning
skrive og slette i en fil på samme tid
Er der nogen, der kan give et bud på, hvordan man skriver og sletter linier i en tekst-fil i én action.
Jeg skal skrive til en tekst-fil, der ikke må indeholde mere end 20 linier. Når en ny linie bliver til føjet i toppen, skal linie nummer 21 slettes i bunden.
Prøv at give os en chance for at komme med et forslag ved at fortælle lidt mere om, hvad du vil. Hvor kommer dine data f.eks. fra - og hvordan ankommer de til scriptet?
Jeg skal skrive til tekst-filen ved at udfylde en formular, der har en php-fil som action og et enkelt input-felt.
Tekst-filen kommer til at bestå af en række produkter, der står på hver deres linie:
Sodavand<br> Æbler<br> Vinglas<br>
Når listen når op på 20 poster (linier) må tekstfilen fremover ikke rummer flere linier.
Dvs. at en ny post bliver tilføjet i toppen af listen, samtidig med at den nederste post (Vinglas fx.) bliver slettet. Ved næste nye post bliver linien med "Æbler" slettet og så fremdeles.
Tak Andreas for dit bud, men det virker bare ikke som jeg ønsker det. Ærgerligt at jeg ikke kan forklare det ordentligt. Jeg giver det dog lige et forsøg mere :-)
Forestil dig, at det drejer sig om en liste over seneste nyheder. Jeg er kun interesseret i at vise en liste med de 20 seneste nyheder.
Hver nyhed skrives som sagt til den samme tekst-fil via en formular. Når formularen submittes, tjekker php-scriptet hvor mange linier tekst-filen består af. Hvis der allerede er listet 20 nyheder, slettes den ældste nyhed og den aktuelle skrives ind i toppen af listen.
Hvis der er under 20 nyheder listet (på hver deres linie i text-filen) tilføjes den nye post naturligvis blot i toppen af listen.
Ikke for at fornærme nogen, men det er sådan set også det mit script gør (det er testet)
Grunden til at det ikke virker kan være på grund af \r\n
hvis jeg husker rigtigt så er det \r\n = windows \n = Linux (eller er det unix) \n\n = Mac
Du køre nok Linux og så skal det nok være: PS: jeg har tilføjet "kommentarer" <?php $filindhold = file_get_contents("fil.txt"); //henter indholdet af fil.txt $nylinje = "test\n"; //her er den nye linje som skal indsættes $sum = $nylinje."".$filindhold; //her sættes den nye linje sammen med resten af teksten $lines = explode("\n", $sum); //her opdeles ved her linje i teksten i et arrya $ny = ""; //starter på at skrive den nye fil
for($i=0; $i<count($lines); $i++){ //køre en løkke if($i < 20){ //hvis hvilen ikke er kørt mere end 20 gange $ny .= $lines[$i]."\n"; //skriver linjen til den nye fil } }
$ny = preg_replace("/^((.|\n)*)\n$/", "\\1", $ny);//fjerne den sidste \n (kan sikkert gøres mere smart)
$fil = fopen("fil.txt", "w"); //starter datastrøm fra fil.txt fwrite($fil, $ny); //skriver i filen fclose($fil); //lukker datastrøm ?>
<?php $filindhold = file_get_contents("fil.txt"); //henter indholdet af fil.txt //$nylinje = "test\r\n"; //her er den nye linje som skal indsættes $sum = $nylinje."".$filindhold; //her sættes den nye linje sammen med resten af teksten $lines = explode("\r\n", $sum); //her opdeles ved her linje i teksten i et arrya $ny = ""; //starter på at skrive den nye fil
for($i=0; $i<count($lines); $i++){ //køre en løkke if($i < 10){ //hvis hvilen ikke er kørt mere end 20 gange $ny .= $lines[$i]."\r\n"; //skriver linjen til den nye fil } }
$ny = preg_replace("/^((.|\r\n)*)\r\n$/", "\\1", $ny);//fjerne den sidste \n (kan sikkert gøres mere smart)
$fil = fopen("fil.txt", "w"); //starter datastrøm fra fil.txt fwrite($fil, $ny); //skriver i filen fclose($fil); //lukker datastrøm
echo '<pre>'; print_r($lines); echo '</pre>';
echo $ny; ?>
jeg har prøvet at submitte tallene 1 - 12.
I fil.txt står tallene sådan: 121110987654321
print_r($lines) udskriver dette:
Array ( [0] => 121110987654321 )
121110987654321
Scriptet sletter, som jeg kan se det, ikke de ældste poster.
$newArr = array_slice($arr, 0, 20); // $newArr indeholder de 20 første elementer i $arr
/mvh </bole>
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.