webForumDet fria alternativet

Läsa slumpad rad ur en textfil ?

PHP

6 svar · 238 visningar · startad av MoneyOpps.nu

Medlem sedan maj 2002106 inlägg
Frågan#1

Hur gör jag följande ??

Jag vill slumpa fram en variabel på en sida, typ sida.php
$rad = rand (1, 10)

Sen vill jag läsa rad $rad från en textfil.
öppna textfil.txt
$string = "läs rad $rad"
stäng textfil.txt

Hur gör jag ?
Rätt dålig på php märker jag :r

Medlem sedan aug. 20002 975 inlägg
#2

Går det bra att göra tvärtom. Läsa in en textfil i en array, och sedan slumpa ur arrayen:

$rad = file("textfil.txt");

srand ((float) microtime() * 10000000);
$randindex = array_rand ($rad);
echo $rad[$randindex];
Medlem sedan maj 2002106 inlägg
#3

Det borde ju fungera.... Ska testa..
Tackar !

Medlem sedan maj 2002106 inlägg
#4

Fungerade perfekt :e

Nu har jag bara en sak till som jag kom på nu.
Går det att slumpa fram enbart jämna tal ?
Alltså 2,4,6,8,..... osv....

Skulle vara bra !

Medlem sedan aug. 20002 975 inlägg
#5
$rad = file("textfil.txt");

srand ((float) microtime() * 10000000);
$randindex = array_rand ($rad);
if ($randindex%2 != 0){
  while ($randindex%2 != 0) $randindex = array_rand ($rad);
}  
echo $rad[$randindex];

En liten varning här. Skulle du välja att istället ha udda rader, tänk då på att om en fil bara har en rad så kommer while-slingan att vara oändlig !

Medlem sedan maj 2002106 inlägg
#6

Det fungerade som det var tänkt, men om textfilen är stor så blir det lite segt eftersom hela textfilen läses in och sen slumpas det en rad ur den.

Det var därför jag vill slumpa ett värde för att sedan enbart läsa in just den raden.

Det kanske är knepigt !?

Medlem sedan aug. 20002 975 inlägg
#7

Ursprungligen av MoneyOpps.nu **Det fungerade som det var tänkt, men om textfilen är stor så blir det lite segt eftersom hela textfilen läses in och sen slumpas det en rad ur den.

Det var därför jag vill slumpa ett värde för att sedan enbart läsa in just den raden.

Det kanske är knepigt !?**

Det är något som överstiger min förmåga.

Dels ska man, efter att ha öppnat filen, läsa av hur många rader filen innehåller, dels ska man gå till början på en slumpad rad. Jag klarar inget av det, men någon annan kanske vet hur man fixar det, själv är jag lite för mycket nybörjare.

Men hur stora filer hade du tänkt dig. Jag testade att läsa in med file() och slumpa, på en fil med innehåll:
Detta är rad 1
Detta är rad 2
... osv

med 10 000 rader / 195kB : c:a 0,2 sekunder
med 100 000 rader / 2040kB : drygt 2 sekunder

Detta på en fyra år gammal compaq. :)

269 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)