Avatar billede RJFreelance Praktikant
31. januar 2009 - 16:11 Der er 8 kommentarer og
1 løsning

Udtræk af fil, hvad er lettest?

Davs.
Jeg har en logfil med nogle linier der starter med forskellige ting der beskriver hvilken del den "logger over".

Hver linie starter med [xxx]

Det jeg så vil er at dele linierne op efter hvad de starter med.

Min umiddelbare fremgangsmåde ville være noget lignende dette:

1. Åbne filen
2. Smide hver linie ind i et array
3. Finde alle de linier der starter med [xxx]
4. Smide de linier i et nyt array
5. Udskrive det nye array

Ville det være den nemmeste løsning?
Det eneste punkt jeg kan få problemer med er 3. Hvilken funktion er det man bruger til at tjekke en linie for noget bestemt?

På forhånd tak :)
Avatar billede moddi100 Seniormester
31. januar 2009 - 16:24 #1
Der er sikkert mange forskellige løsninger, men jeg vil da lige komme med det jeg først kommer til at tænke på.

Hvis du kører PHP5+ og du har en stor logfil (eller får det), vil det nok være smartest at bruge XML, se evt http://www.eksperten.dk/artikler/1263.

Ellers kan du jo lave noget i stil med:

$array = file('log.txt');
$nyt = array();

for($i = 0; $i < count($array); $i++)
{
  if(substr($array[$i], 0, 5) == "[xxx]")
      $nyt[] = $array[$i]
}
print_r($nyt);

Dette vil så udskrive alle linjer der begynder med de 5 tegn [xxx]. Men det vil være langsomt hvis det er en stor logfil.
Avatar billede RJFreelance Praktikant
31. januar 2009 - 16:59 #2
Jeg bruger dit eksempel, indtil jeg får tid til at sætte mig ind i xml ordentligt.

Og det virker også fint, indtil jeg ændrede det således:

$array = file('../logfile.txt');
$nyt = array();
$antalCifre = strlen($_GET['type']) + 2;
echo $antalCifre;

for($i = 0; $i < count($array); $i++)
{
  if(substr($array[$i], 0, $antalCifre) == $_GET['type']) {
      $nyt[] = $array[$i]; }
}
print_r($nyt);

Kan du se nogle fejl der?
Arrayet er bare tomt. Også selvom den indtastede type findes i filen.
Avatar billede moddi100 Seniormester
31. januar 2009 - 17:03 #3
Prøv denne:
$antalCifre = strlen($_GET['type']);
Avatar billede moddi100 Seniormester
31. januar 2009 - 17:04 #4
Men hvorfan ser $_GET['type'] ud? er det f.eks. xxx og så står der [xxx] i filen??
Avatar billede RJFreelance Praktikant
31. januar 2009 - 17:05 #5
Det er ikke der fejlen ligger, for jeg skal have de 2 ekstra tegn med.
Avatar billede RJFreelance Praktikant
31. januar 2009 - 17:09 #6
Det var min fejl, den er løst :)

Smid et svar, og tak for hjælpen.
Avatar billede moddi100 Seniormester
31. januar 2009 - 17:09 #7
Så skal du have det med begge steder:

$antalCifre = strlen($_GET['type']) + 2;
...
if(substr($array[$i], 0, $antalCifre) == '[' . $_GET['type'] . ']')
Avatar billede moddi100 Seniormester
31. januar 2009 - 17:10 #8
Svar :D
Avatar billede moddi100 Seniormester
31. januar 2009 - 17:18 #9
Takker for point
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