[PHP] Parsing a file problem

Pagina: 1
Acties:

  • djack
  • Registratie: September 2002
  • Laatst online: 11-11-2024
Ik ben bezig met het maken van een php scriptje dat logfiles parst naar een database, hier heb ik een probleem ondervonden.

Uitleg
Formaat van de logfile is :
code:
1
CATEGORY:VALUE:STATUS

Voorbeeld
code:
1
2
NETWORKING:Ethernet eth0 192.168.0.1 Mac 00 :03 :79 :1D :A1 :61:1
OS:Linux Red Hat 7.3:0

Mijn huidige code is

PHP:
1
list($cat,$val,$status) = explode(":",$readline);


De meeste lijnen van de logfile zijn vrij proper
en geven een mooi resultaat weer
PHP:
1
2
3
$cat = OS
$val=Linux Red Hat 7.3
$status= 0

Maar vermits er ook $Values zijn die : hebben geeft dit een probleem
PHP:
1
2
3
$cat=NETWORKING
$val= Ethernet eth0 192.168.0.1 Mac 00
$status=03

terwijl ik iets moet terugkrijgen voor die value van

PHP:
1
$value=Ethernet eth0 192.168.0.1 Mac 00 :03 :79 :1D :A1 :61

en voor die status

PHP:
1
$status=1

Enig een ideeke oe da ik dien rommel mooi kan parsen ....
En neen ik kan die niet laten loggen in een ander formaat.

Thanks Tweakers :-)

[ Voor 0% gewijzigd door djack op 24-10-2002 10:40 . Reden: code tags :-) ]

Because Great minds Think alike


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:26
Schrijf ABN, alsjeblieft.

Het probleem is hier natuurlijk dat je eigenlijk niet wilt splitsen op ':'. Je zult duidelijk moeten stellen waar je wel op wilt splitsen. Met een reguliere expressie kun je dan vervolgens de juiste delen in de juiste variabelen krijgen. Ik kan me bijvoorbeeld voorstellen dat je opdeelt in 'alles voor de eerste dubbele punt', 'alles na de laatste dubbele punt' en 'de rest in 't midden'. Dat betekent wel dat alleen je VALUE dubbele punten kan bevatten.

In een reguliere expressie wordt dat zoiets:
Perl:
1
($cat, $val, $status) = ($readline =~ /^([^:]*):(.*):([^:]*)$/)


Let op! Dit is (ongeteste) Perl code, dus je zult zelf wat werkends moeten maken. Zie voor meer informatie de PHP manual over reguliere expressies, of de tutorial daarover in de FAQ. Met Google is ook genoeg te vinden.

  • djack
  • Registratie: September 2002
  • Laatst online: 11-11-2024
Ik zal het vanavond eens proberen
Thanks dude

Because Great minds Think alike