Salut,
afin de pouvoir faire un import d'un fichier texte dans une table mysql, j'ai besoin de convertir un fichier en csv/requete sql.Je vous mets 2 lignes de ce fichier:
id=firewall time="2006-07-02 23:59:28" fw="xxx" tz=+0000 startime="2006-07-02 23:57:28" pri=5 slotlevel=2 ruleid=1 srcif="Ethernet1" srcifname="in" ipproto=udp proto=snmp src=10.10.10.10 srcport=2419 dst=10.10.10.10 dstport=161 dstportname=snmp sent=44 rcvd=95 duration=0.00 logtype="connection"
id=firewall time="2006-07-02 22:32:59" fw="xxx" tz=+0000 startime="2006-07-02 22:30:59" pri=5 slotlevel=2 ruleid=14 srcif="Ethernet0" srcifname="out" ipproto=udp dstif="Ethernet1" dstifname="in" proto=snmp src=10.10.10.10 srcport=2420 dst=10.10.10.10 dstport=161 dstportname=snmp dstname=net_printers sent=43 rcvd=53 duration=0.00 logtype="connection"
j'ai 2 problemes:
1) les champs ne sont pas au format csv: j'ai un nom_du_champ=une valeure, avec parfois des "".
J'ai déjà essayé de faire un script php qui vire les 'nom_du_champ=', mais j'ai un autre probleme:
2) d'une ligne à l'autre le nombre de champs n'est pas le meme: 20 pour la premiere ligne, 23 pour la seconde.
pour retomber sur un fichier csv normal, j'ai essayé avec fgetcsv, mais je bloque avec le probleme numéro 2.
J'ai ensuite essayé avec fscanf, mais c'est tres complexe, surtout à cause du probleme 2
Pour éviter ca, j'ai essayé (en vain), de faire un script qui me genere une requete sql en fonction du nombre de champ (ex: time=), et me permettant d'avoir un truc du genre:
$query="INSERT INTO `matable` SET `time`="xxx", etc...";
la problématique étant que le script doit pouvoir fonctioner sans tenir compte du nombre de champs, sachant que j'aurais une table sql avec le plus de champs possible.
si vous avez une piste.
Merci pour votre aide!
Partager