Avatar billede henrik_ffc Nybegynder
13. marts 2002 - 13:53 Der er 9 kommentarer og
1 løsning

list() = split() problem

Jeg savner hjælp til at få dette til at virke:

list($var1, $var2, $var3) = split('???', 'xxx yyy "zzz"');
Her skal $var1 være "xxx", $var2 skal være "yyy" og $var3 skal være "zzz"


Avatar billede erikjacobsen Ekspert
13. marts 2002 - 14:02 #1
list($var1, $var2, $var3) = split(' ', 'xxx yyy "zzz"');

?? Er det havd du mener?
Avatar billede henrik_ffc Nybegynder
13. marts 2002 - 14:05 #2
Problemet er at zzz kan indeholde mellemrum, så opgaven burde være:

list($var1, $var2, $var3) = split('???', 'xxx yyy "zz z"');
$var1 være blive "xxx", $var2 skal blive "yyy" og $var3 skal blive "zz z"

Jeg har forsøgt med preg_split istedet, med lidt bedre held, men jeg har ikke
fundet løsningen endnu....
Avatar billede henrik_ffc Nybegynder
13. marts 2002 - 14:08 #3
Det er ikke nogen hemmelighed at det er en webserver logfil jeg vil splitte, og det er UA-feltet der giver bøwl, da det indeholder mellemrum
Avatar billede erikjacobsen Ekspert
13. marts 2002 - 14:08 #4
Hmm, hvad med om du nu gjorde dig den ulejlighed at
skrive et ordentlig spørgsmål? Nu kommer du vel også
og siger, at der kan være mere end 3 variabler, og at det
ikke nødvendigvis er den sidste, der kan indeholde "....." med
mellemrum. Så hvad er *præcist* dit problem?
Avatar billede henrik_ffc Nybegynder
13. marts 2002 - 14:13 #5
Der ER mere end 3 variable, men det er ikke antallet der er problemet.
Når bare jeg har fundet SYSTEMET er resten let nok

Så løsning af nedenstående er fint nok.
list($var1, $var2, $var3) = split('???', 'xxx yyy "zz z"'); // evt preg_split()

Du kan godt antage at felt 1 og 2 IKKE indeholder mellemrum, men at felt 3 KAN indeholde mellemrum.
Til gengæld ved du også at felt 3 ALTID er omkredset af "
Avatar billede erikjacobsen Ekspert
13. marts 2002 - 14:19 #6
En log fil - jamen lad os så tage et realistisk eksempel. Din linie kan
måske se lidt anderledes ud:

$linie='80.196.245.165 - - [02/Mar/2002:04:06:49 -0600] "GET /fotx/skwat HTTP/1.1" 302 5 "http://fotx.net/skwat" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"';

if (eregi('^([^ ]+) ([^ ]+) ([^ ]+) \[([^]]+)\] "([^"]+)" ([0-9]+) ([0-9]+) "([^"]+)" "([^"]+)"$',$linie,$reg)) {
    $ip=$reg[1];
    $user=$reg[2];
    $pass=$reg[3];
    $time=$reg[4];
    $url=$reg[5];
    $code=$reg[6];
    $size=$reg[7];
    $ref=$reg[8];
    $ua=$reg[9];

    print "$ip $ref $ua<br>";
} else {
    print "Forkert linie<br>";
}
Avatar billede erikjacobsen Ekspert
13. marts 2002 - 14:24 #7
Ups, reg[3] er $user og $reg[2] er hostnavn....
Avatar billede henrik_ffc Nybegynder
13. marts 2002 - 14:24 #8
Takker
Avatar billede henrik_ffc Nybegynder
13. marts 2002 - 14:26 #9
$reg[2] ER user
$reg[3] er ident
hostnavn gemmes ikke (udover IP eller hvis serveren selv slår det op)
Avatar billede erikjacobsen Ekspert
13. marts 2002 - 14:34 #10
Det er jo formentlig rigtigt - men det afhænger nu af serveren.
Der er vel ingen der slår hostnavnet op nu om dage .... jeg *har*
prøvet - det tog sin tid....
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