parsser un fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : parsser un fichier

par gb » 27 juin 2005, 11:33

tu peux chercher du côté des expressions régulières et de la fonction preg_match_all.

il y a un tuto bien fait à ce sujet:
http://www.phpindex.com/articles/articl ... element=38

par mere-teresa » 27 juin 2005, 11:31

par coolhead » 27 juin 2005, 11:11

ok mais pour le fichier pas Xml ? tel :


<path id="th0rec0" class="th0leg0MAP" style="fill:rgb(212,250,240)" d="M87387 73382l-367 678l171 351l-771 1319l-1166 -40l137 -1312l-1228 -278l-356 -4l-48 -382l111 -1148l718 -88l1036 -1018l250 -272l714 640l262 184l1341 645l-34 339
l-309 -30z" />
<path id="th0rec1" class="th0leg0MAP" style="fill:rgb(212,250,240)" d="M91616 46213l-350 129l-1866 -1183l-1453 -316l-674 675l-349 70l-907 -509l-236 -283l93 -727l-394 -615l373 -645l206 -311l687 273l1083 -991l365 -80l-199 323l286 595l1026 -1009
l1161 911l1497 -229l629 400l263 274l-301 964l-147 307l-160 331l-460 563z" />
<path id="th0rec2" class="th0leg0MAP" style="fill:rgb(212,250,240)" d="M105352 78747l-106 340l-577 351l115 696l-270 215l-285 -112l-891 -187l146 -745l-1759 -504l12 -727l-1330 -687l-90 -718l316 -1097l1550 -1055l593 901l702 281l315 217l209 1130l904 707
z" />
...

par Invité » 27 juin 2005, 10:43

Heu simpleXML sert à ça en PHP5 mais en PHP4 il y a des fonctions pour parser le XML directement !

parsser un fichier

par coolhead » 27 juin 2005, 08:49

Bonjour,

Je recherche une solution php permettant de parcourir un fichier en récupérant certains éléments dedans.

$Fp = fopen($File,"r");
$In = fread($Fp,filesize($File));
fclose($Fp);

Jusque là pas de problèmes.

Le fichier $File est un fichier Xml. Je veux récupérer des données qui sont entre certaine balise.
Comment construire un REGEX qui récupère ce que je veux ? Dois je utiliser des boucles, array, ... ?
Je ne trouve pas la bonne solution.

Voici un extrait du fichier Xml :
-------------------------------------------------------------------------------------------
<map id="tabth0" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<titel id="titth0">COMMUNE</titel>
<tabelle>
<fields id="fieth0">
<field0 datatype="number">ID_GEOFLA</field0>
<field1 datatype="text">CODE_COMM</field1>
<field2 datatype="text">NOM_COMM</field2>
<field3 datatype="text">STATUT</field3>
<field4 datatype="number">X_CHF_LIEU</field4>
<field5 datatype="number">Y_CHF_LIEU</field5>
<field6 datatype="number">X_CENTROID</field6>
<field7 datatype="number">Y_CENTROID</field7>
<field8 datatype="number">Z_CENTROID</field8>
<field9 datatype="number">SUPERFICIE</field9>
<field10 datatype="number">POPULATION</field10>
<field11 datatype="text">CODE_CANT</field11>
<field12 datatype="text">CODE_ARR</field12>
<field13 datatype="text">CODE_DEPT</field13>
<field14 datatype="text">NOM_DEPT</field14>
<field15 datatype="text">CODE_REG</field15>
<field16 datatype="text">NOM_REGION</field16>
</fields>
<records>

<rec id="tabth0rec0">
<MVSVGNo>1</MVSVGNo>
<MVSVGXMin>83759</MVSVGXMin>
<MVSVGXMax>88191</MVSVGXMax>
<MVSVGYMin>71188</MVSVGYMin>
<MVSVGYMax>75730</MVSVGYMax>
<tiles>
</tiles>
<custom>
<field0 dt:dt="float">21698</field0>
<field1>001</field1>
<field2>VILLE1</field2>
<field3>Préfecture</field3>
<field4>-99999</field4>
<field5>-99999</field5>
<field6>4338</field6>
<field7>23837</field7>
<field8>140</field8>
<field9 dt:dt="float">1074</field9>
<field10 dt:dt="float">30</field10>
<field11>99</field11>
<field12>1</field12>
<field13>61</field13>
<field14>ORNE</field14>
<field15>25</field15>
<field16>-</field16>
</custom>
</rec>

<rec id="tabth0rec1">
<MVSVGNo>2</MVSVGNo>
<MVSVGXMin>85480</MVSVGXMin>
<MVSVGXMax>92857</MVSVGXMax>
<MVSVGYMin>41609</MVSVGYMin>
<MVSVGYMax>46342</MVSVGYMax>
<tiles>
</tiles>
<custom>
<field0 dt:dt="float">21699</field0>
<field1>002</field1>
<field2>VILLE_AZERTY</field2>
<field3>Commune simple</field3>
<field4>4361</field4>
<field5>24133</field5>
<field6>4371</field6>
<field7>24133</field7>
<field8>181</field8>
<field9 dt:dt="float">2046</field9>
<field10 dt:dt="float">-99999</field10>
<field11>24</field11>
<field12>2</field12>
<field13>&nbsp</field13>
<field14>&nbsp</field14>
<field15>25</field15>
<field16>-</field16>
</custom>
</rec>
<rec id="tabth0rec2">
<MVSVGNo>3</MVSVGNo>
<MVSVGXMin>100317</MVSVGXMin>
<MVSVGXMax>105352</MVSVGXMax>
<MVSVGYMin>74517</MVSVGYMin>
<MVSVGYMax>80349</MVSVGYMax>
<tiles>
</tiles>
<custom>
<field0 dt:dt="float">26914</field0>
<field1>002</field1>
...
-------------------------------------------------------------------------------------------

Dans ce fichier, je veux pouvoir me construire un array comme clé le CODE_COMM tel que pour l'exemple :

$Array[001]['NOM_COMM'] = 'VILLE1';
$Array[001]['SUPERFICIE'] = '1074';
...




De la même manière, sur un autre fichier, je veux récupérer un array avec les coordonées de la ville.

Le fichier :
-------------------------------------------------------------------------------------------
<path id="th0rec0" class="th0leg0MAP" style="fill:rgb(212,250,240)" d="M87387 73382l-367 678l171 351l-771 1319l-1166 -40l137 -1312l-1228 -278l-356 -4l-48 -382l111 -1148l718 -88l1036 -1018l250 -272l714 640l262 184l1341 645l-34 339
l-309 -30z" />
<path id="th0rec1" class="th0leg0MAP" style="fill:rgb(212,250,240)" d="M91616 46213l-350 129l-1866 -1183l-1453 -316l-674 675l-349 70l-907 -509l-236 -283l93 -727l-394 -615l373 -645l206 -311l687 273l1083 -991l365 -80l-199 323l286 595l1026 -1009
l1161 911l1497 -229l629 400l263 274l-301 964l-147 307l-160 331l-460 563z" />
<path id="th0rec2" class="th0leg0MAP" style="fill:rgb(212,250,240)" d="M105352 78747l-106 340l-577 351l115 696l-270 215l-285 -112l-891 -187l146 -745l-1759 -504l12 -727l-1330 -687l-90 -718l316 -1097l1550 -1055l593 901l702 281l315 217l209 1130l904 707
z" />
...
-------------------------------------------------------------------------------------------

Et je cherche un array tel que :
$Array['th0rec0'] = 'M87387 73382l-367 678l171 351l-771 1319l-1166 -40l137 -1312l-1228 -278l-356 -4l-48 -382l111 -1148l718 -88l1036 -1018l250 -272l714 640l262 184l1341 645l-34 339
l-309 -30z';
...


Merci beaucoup