/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Liste 5 sidste linjer i .txt-fil
Fra : Lars Sommer


Dato : 05-01-04 21:45

Jeg har en besøgstæller der logger lidt forskellig info om brugerne, og jeg
vil gerne kunne liste de f.eks 5 nederste linjer i den .txt-fil som tælleren
gemmer oplysninger i.
Hver linje representerer et besøg, og indeholder lidt forskelligt. Jeg vil
kun have listet teksten indtil første komma.
Hvordan griber jeg sådan et script an?





 
 
Thomas Lindgaard (05-01-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 05-01-04 22:22

On Mon, 05 Jan 2004 21:45:11 +0100, Lars Sommer wrote:

> Jeg har en besøgstæller der logger lidt forskellig info om brugerne, og jeg
> vil gerne kunne liste de f.eks 5 nederste linjer i den .txt-fil som tælleren
> gemmer oplysninger i.
> Hver linje representerer et besøg, og indeholder lidt forskelligt. Jeg vil
> kun have listet teksten indtil første komma.
> Hvordan griber jeg sådan et script an?

Det kunne nok gøres lidt ala følgende:

<?php
$visitors = file('din_txt_fil');
for ($i = count($visitors - 5; $i < count($visitors); $i++)
{
print substr($visitors[$i], 0, strpos(',', $visitors[$i]));
}
?>

.... utestet naturligvis :)

Mvh.
/Thomas

Christian Joergensen (06-01-2004)
Kommentar
Fra : Christian Joergensen


Dato : 06-01-04 03:11

On Mon, 05 Jan 2004 22:21:57 +0100, Thomas Lindgaard wrote:

> $visitors = file('din_txt_fil');

Hvad tror du der sker når 'din_txt_fil' er en logfil på flere hundrede
megabytes?

Jeg ville bruge en gammeldags fopen() først. Herefter vil jeg
ud fra en passende konstant (som spørger selv må vurdere sig frem til)
approksimere mig frem til hvor langt nede i filen de sidste 10 linier
kunne befinde sig. Det behøver ikke være så præcist (+/- 100 linier fx.).

Derefter vil jeg benytte fseek() til at hoppe et godt stykke ned
i filen, og her konstruere en løkke der, med fgets(), læser en linie af
gangen og smider linierne i en stak (array) og samtidig skubber et element
ud således at der hele tiden er fem elementer i stakken.

Når man kommer til EOF har man et array med de sidste fem linier på en
relativ optimal måde

--
Christian Jørgensen | Concatenation; the process of gluing one cat's
http://www.razor.dk | nose to another cat's tail. Also, a similar
| operation on two strings.


Christian Joergensen (06-01-2004)
Kommentar
Fra : Christian Joergensen


Dato : 06-01-04 03:12

On Tue, 06 Jan 2004 03:11:28 +0100, Christian Joergensen wrote:

> 10 linier

Som subject forklarer er det naturligvis 5 linier

--
Christian Jørgensen | If ignorance is bliss
http://www.razor.dk | - then knock the smile off my face ;)


Thomas Lindgaard (06-01-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 06-01-04 20:32

On Tue, 06 Jan 2004 03:11:28 +0100, Christian Joergensen wrote:

>> $visitors = file('din_txt_fil');
>
> Hvad tror du der sker når 'din_txt_fil' er en logfil på flere hundrede
> megabytes?

Så tror jeg ikke at skidtet vil køre så hurtigt - men det var
overladt til læseren at overveje om filen blev så stor... :)

.... det skullle jeg måske nok have nævnt :)

Mvh.
/Thomas



Thomas Lindgaard (06-01-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 06-01-04 20:34

On Tue, 06 Jan 2004 20:31:41 +0100, Thomas Lindgaard wrote:

> ... det skullle jeg måske nok have nævnt :)

Faktisk var jeg også ved at dele min post op i to - nemlig "den lette" og
"den rigtige", men det blev alligevel for meget lige på det tidspunkt :)

Mvh.
/Thomas

Arne Feldborg (09-01-2004)
Kommentar
Fra : Arne Feldborg


Dato : 09-01-04 23:27

Christian Joergensen <mail@phpguru.dk> skrev Tue, 06 Jan 2004 03:11:28
+0100

>Jeg ville bruge en gammeldags fopen() først. Herefter vil jeg
>ud fra en passende konstant (som spørger selv må vurdere sig frem til)
>approksimere mig frem til hvor langt nede i filen de sidste 10 linier
>kunne befinde sig. Det behøver ikke være så præcist (+/- 100 linier fx.).
>
>Derefter vil jeg benytte fseek() til at hoppe et godt stykke ned
>i filen,
>
Ville det ikke være mere smart at starte fra EOF og så hoppe et antal
bytes tilbage - så er startpositionen uafhængig af filstørelsen.?


--
mvh, A:\Feldborg

Folketælllinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste