Avatar billede ejensen Nybegynder
08. september 2005 - 08:22 Der er 8 kommentarer og
1 løsning

Skriv/læs fra tekstfil

Hejsa

Jeg har en formular der skriver til en txtfil - dette fungere fint nok. Hver gang formularen bliver submittet skriver den en linie i txtfilen (f.eks: Birger)

Men jeg skal kun bruge 10 linier txt, så nu er det:
Kan jeg gøre så der kun bliver skrevet 10 linier tekst i min txt-fil og den så begynder at overskrive den ældste post, eller alternativt et script der henter de 10 seneste poster ud af txtfilen

Blev det forståeligt ?
Avatar billede hmortensen Nybegynder
08. september 2005 - 10:29 #1
Hvis filen ikke er meget stor, kan du gøre sådan her:
$linier = file("fil.txt");
$antal = count($linier);
for ($x = $antal; $x <= $antal - 10; $x--)
{
  echo $linier[$x];
}
Avatar billede reffo Nybegynder
08. september 2005 - 10:31 #2
Så kan du vel sige

$file = file($variablenfilenliggeri)
$i = 0;

FOREACH ($file as $line)
                    {
        IF ($i < "10") {echo "$line"; $i++;}
                    }

Så burde den kun vise de første 10 linier
Avatar billede hmortensen Nybegynder
08. september 2005 - 10:34 #3
reffo, en foreach er nok ikke smart her, da antal gennemløb kendes, og man antager at nyeste står nederst.
Avatar billede coderdk Praktikant
08. september 2005 - 11:03 #4
Det kunne gøres sådan:

    $linjer = file( 'fil.txt' );
    array_unshift( $linjer, $_POST['ny_linje'] );
    $linjer = implode( "\n", array_slice( $linjer, 0, 10 ) );
    if ( $fp = fopen( 'fil.txt', 'w' ) )
    {
        if ( flock( $fp, LOCK_EX ) )
        {
            fwrite( $fp, $linjer );
            flock( $fp, LOCK_UN );
        }
        else
        {
            echo "Kunne ikke låse filen!";
        }
        fclose( $fp );
    }
    else
    {
        echo "Kunne ikke åbne filen til skrivning!";
    }

Her antager jeg at filen hedder fil.txt og at din form POST'er, og den linje der skal gemmes er i feltet "ny_linje".
Avatar billede ejensen Nybegynder
08. september 2005 - 12:21 #5
Mums :-)

Holder mig til hmortensen's forslag (som lige skal smide et svar), da jeg ved nærmere eftertanke syntes det kunne være rart/praktisk at have alle data i tekstfilen, og så evt. gøre så den gemmer for en uge af gangen eller lign.

Tusind tak
Avatar billede coderdk Praktikant
08. september 2005 - 12:22 #6
Ok, men husk, hvis der er mulighed for at folk kan skrive samtidigt, skal du bruge flock(), ellers risikerer du at du pludselig mister al data i filen ;)
Avatar billede hmortensen Nybegynder
08. september 2005 - 12:24 #7
Det var så lidt.
Avatar billede reffo Nybegynder
08. september 2005 - 13:39 #8
Det kan der være noget om Hr mortensen :) Mybad
Avatar billede ejensen Nybegynder
08. september 2005 - 13:49 #9
coderdk>
OK, den må jeg lige overveje lidt. Kan jo sikkert godt sammenflette tingene lidt :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester