Avatar billede Slettet bruger
06. februar 2003 - 23:36 Der er 13 kommentarer og
1 løsning

tilfældig linje fra tekstfil

Hej.
Hvordan tager jeg en tilfældig linje fra en tekstfil og skriver indholdet på siden?!
Avatar billede angam Nybegynder
06. februar 2003 - 23:49 #1
<?
$filename = 'filnavn.txt';

$fp=fopen($filename,'r');
$buffer=fread($fp, filesize($filename));
fclose($fp);

$lines=explode("\n", $buffer);
$bufnum=rand(0, sizeof($lines)-1);

echo($lines[$bufnum]);

?>
Avatar billede angam Nybegynder
06. februar 2003 - 23:49 #2
.. og det var et svar ;-)
Avatar billede Slettet bruger
06. februar 2003 - 23:50 #3
Den finder sommetider en tom linje i bunden?
Avatar billede Slettet bruger
06. februar 2003 - 23:51 #4
du kan se et eksempel på www.pilip.dk/index.php
Avatar billede angam Nybegynder
06. februar 2003 - 23:54 #5
hvis der er en <enter> efter sidste linie, så ret

$bufnum=rand(0, sizeof($lines)-1);

til

$bufnum=rand(0, sizeof($lines)-2);
Avatar billede angam Nybegynder
06. februar 2003 - 23:55 #6
Funktionen tager jo filen og splitter på enter/linefeed (\n). Hvis sidste linie afsluttes med '\n', vil der - for funktionen at se - være en ekstra (tom) linie, og (-1) skal erstattes med (-2) som beskrevet ovenfor.
Avatar billede olebole Juniormester
07. februar 2003 - 00:09 #7
<ole>

$lineArray = file( "filnavn.txt" );
$randNum = rand( 0, count($lineArray) );
print $lineArray[$randNum];

/mvh
</bole>
Avatar billede olebole Juniormester
07. februar 2003 - 00:11 #8
PS: funktionen 'file()' læser en fil og lægger dens linier direkte i et array.
Avatar billede angam Nybegynder
07. februar 2003 - 00:11 #9
damn you ole - det var en 40 gange mere simpel løsning :-)
Avatar billede sukos Juniormester
07. februar 2003 - 00:41 #10
bruger selv denne:
( $root er defineret i en include som $_SERVER['DOCUMENT_ROOT'] )

<?php
if (file_exists($root ."/randomtext.txt")) { //findes filen overhovedet?

$tekster = file($root ."/randomtext.txt");
$visttext = rand(0, count($tekster) -1); //file starter jo fra 0 og op
$tekster[$visttext] = trim($tekster[$visttext]); //ingen linieskift i koden  efter læsning af linien
$tekster[$visttext] = htmlentities("$tekster[$visttext]"); //straight HTML, især til gavn for MAC-brugere
echo $tekster[$visttext];

}else{

echo"P&aring; sporet af en vellykket fest"; //Filen fandtes ikke, så vis standard-besked

}
clearstatcache();
?>
Avatar billede olebole Juniormester
07. februar 2003 - 00:55 #11
'-1' ... naturligvis, dooohhh. Sorry  :D
Avatar billede sukos Juniormester
07. februar 2003 - 01:00 #12
hihi :O)
syntes nemmerlig ellers osse at det var sjovt at se en langt mere simpel løsning end angam's, men så lige "count" og tænkte jeg ville deltage :O)
Avatar billede mikl-dk Nybegynder
07. februar 2003 - 14:54 #13
Lidt sammenskrevet:

function randomLine($fil)
{
$filLinier = file("$fil");
return $filLinier[rand(0, count($filLinier)-1)];
}

Sådan bruges den:
echo randomLine("hej.txt");

/mikl-dk
Avatar billede kastermester Nybegynder
07. februar 2003 - 21:03 #14
Og så lige for at være fræk, smæk det hele sammen:

function randomLineFromFile($file){
  if(file_exists($file){
      $fileLines = file($file);
      return htmlentities(trim($fileLines[rand(0, count($fileLines) -1)]));
  } else {
      return "Hulk, Gerda løb væk.";
  }
}

Bruges på samme måde som ovenover (randomLineFromFile("minfil.txt")).
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