Traitement d'un fichier texte avec PHP
baymard
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Salut la famille j'ai un problème depuis un moment j'ai envie de recupérer des informations dans un fichier texte et de les stocker dans une base de données mysql je vais vous présenter une partie du document:
Connected to 10.10.3.2.
Base Station
============
AVU: OK
PIU Mode Status Version
------------------------------------------------
PIU 1: Not Installed
PSU Status
-------------------------------
PSU 1: OK
PSU 2: OK
GPS Status:
-----------
External 1PPS : OK
4 Satellites and More : OK
GPS Com : OK
ce que je veux en fait c'est de récupérer par exemple le "ok" de la ligne AVU de même pour PIU1 récupérer "Not Installed" et de les stocker dans la base de données.Voici le code que je tape mais je n'ai aucun résultat
Connected to 10.10.3.2.
Base Station
============
AVU: OK
PIU Mode Status Version
------------------------------------------------
PIU 1: Not Installed
PSU Status
-------------------------------
PSU 1: OK
PSU 2: OK
GPS Status:
-----------
External 1PPS : OK
4 Satellites and More : OK
GPS Com : OK
ce que je veux en fait c'est de récupérer par exemple le "ok" de la ligne AVU de même pour PIU1 récupérer "Not Installed" et de les stocker dans la base de données.Voici le code que je tape mais je n'ai aucun résultat
<?php // traitement du fichier $filename="10.10.3.2.txt"; if($datas=file($filename)){ $l=count($datas); foreach($datas as $key=>$data){ if(preg_match("/base_station/i",$data)and(preg_match("/AVU/i",$data)){ $ligne=explode(':',$datas[$key]); echo trim($ligne[1]); } } } ?>
A voir également:
- Traitement d'un fichier texte avec PHP
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
4 réponses
Salut baymard,
Utilise file_get_contents pour lire ton fichier d'un coup dans une variable.
Puis applique les regexp suivantes pour capturer ce que tu souhaites :
Cela matche en mode multiligne (m) les lignes commençant par "AVU:" avec un ou plusieurs caractères blancs à la suite, et capture ce qui se trouve à la suite jusqu'à la fin de la ligne en question. Le résultat de la capture se trouve dans $matches[1].
et donc :
Pour ton autre donnée.
Je suppose aussi qu'il n'y a qu'une seule ligne matchant ces caractéristiques. Sinon, utilise preg_match_all.
Dal
Utilise file_get_contents pour lire ton fichier d'un coup dans une variable.
Puis applique les regexp suivantes pour capturer ce que tu souhaites :
preg_match('/^AVU:\s+(.*)$/m', $contenu, $matches)
Cela matche en mode multiligne (m) les lignes commençant par "AVU:" avec un ou plusieurs caractères blancs à la suite, et capture ce qui se trouve à la suite jusqu'à la fin de la ligne en question. Le résultat de la capture se trouve dans $matches[1].
et donc :
preg_match('/^PIU 1:\s+(.*)$/m', $contenu, $matches)
Pour ton autre donnée.
Je suppose aussi qu'il n'y a qu'une seule ligne matchant ces caractéristiques. Sinon, utilise preg_match_all.
Dal
<?php // traitement du fichier $filename="10.10.3.2.txt"; if($datas=file_get_contents($filename)){ $l=count($datas); foreach($datas as $key=>$data){ if(preg_match('/^AVU:\s+(.*)$/m', $contenu, $matches)){ $ligne=explode(':',$datas[$key]); echo trim($matches[1]); } } } ?>
mais ca ne donne toujours rien
<?php // traitement du fichier $filename="10.10.3.2.txt"; if($datas=var_dump(file($filename))){ $l=count($v); foreach(file("10.10.3.2.txt") as $k => $v) { if(substr_count($v, 'AVU')) { $avu = explode(':', $v); echo trim($avu[1]); // ok } } } ?>
et ca me donne ce résultat mais c'est pas ce que je veux
array(65) { [0]=> string(25) "Connected to 10.10.3.2. " [1]=> string(14) "Base Station " [2]=> string(14) "============ " [3]=> string(29) "AVU: OK " [4]=> string(2) " " [5]=> string(50) "PIU Mode Status Version " [6]=> string(50) "------------------------------------------------ " [7]=> string(24) "PIU 1: Not Installed " [8]=> string(33) "PSU Status " [9]=> string(33) "------------------------------- " [10]=> string(29) "PSU 1: OK " [11]=> string(29) "PSU 2: OK " [12]=> string(2) " " [13]=> string(13) "GPS Status: " [14]=> string(13) "----------- " [15]=> string(42) "External 1PPS : OK " [16]=> string(42) "4 Satellites and More : OK " [17]=> string(42) "GPS Com : OK " [18]=> string(2) " " [19]=> string(5) "NPU " [20]=> string(5) "=== " [21]=> string(42) "Data Port Status : Up " [22]=> string(47) "Data Port Management Traffic : Enabled " [23]=> string(2) " " [24]=> string(5) "ODU " [25]=> string(5) "=== " [26]=> string(41) "ID : 3 " [27]=> string(43) "Associated to AU:Channel : 2:1 " [28]=> string(47) "Admin Status : Enabled " [29]=> string(39) "------------------------------------- " [30]=> string(41) "ID : 4 " [31]=> string(43) "Associated to AU:Channel : 2:2 " [32]=> string(47) "Admin Status : Enabled " [33]=> string(39) "------------------------------------- " [34]=> string(41) "ID : 5 " [35]=> string(43) "Associated to AU:Channel : 3:1 " [36]=> string(47) "Admin Status : Enabled " [37]=> string(2) " " [38]=> string(4) "AU " [39]=> string(4) "== " [40]=> string(41) "AU Slot ID : 1 " [41]=> string(53) "Status : Not Installed " [42]=> string(52) "Fault Status : Disconnected " [43]=> string(39) "------------------------------------- " [44]=> string(41) "AU Slot ID : 2 " [45]=> string(49) "Status : Installed " [46]=> string(49) "Fault Status : No Faults " [47]=> string(39) "------------------------------------- " [48]=> string(41) "AU Slot ID : 3 " [49]=> string(49) "Status : Installed " [50]=> string(49) "Fault Status : No Faults " [51]=> string(39) "------------------------------------- " [52]=> string(159) "Press any key to continue... AU Slot ID : 4 " [53]=> string(49) "Status : Installed " [54]=> string(49) "Fault Status : No Faults " [55]=> string(2) " " [56]=> string(32) "Base Station-RADIUS-Accounting " [57]=> string(32) "============================== " [58]=> string(46) "Activity Status : Active " [59]=> string(42) "Operation Status : Up " [60]=> string(2) " " [61]=> string(36) "Base Station-RADIUS-Authentication " [62]=> string(36) "================================== " [63]=> string(46) "Activity Status : Active " [64]=> string(42) "Operation Status : Up " }
Comme indiqué, si tu utilises file_get_contents, tu as tout ton fichier dans ta variable, et il n'est pas utile de parcourir ligne par ligne, tu donnes l'ensemble à preg-match en multi-ligne (avec le modificateur "m"). C'est tout l'intérêt de la manoeuvre.
Donc :
donne :
sur le contenu que tu as mentionné dans ton message d'origine. Plus de explode, de trim, de foreach, etc.
Dal
Donc :
<?php $filename="10.10.3.2.txt"; if ($datas=file_get_contents($filename)) { if (preg_match('/^AVU:\s+(.*)$/m', $datas, $matches)) { echo "<p>J'ai trouvé AVU : $matches[1]</p>"; } else { echo "<p>erreur : AVU introuvable</p>"; } if (preg_match('/^PIU 1:\s+(.*)$/m', $datas, $matches)) { echo "<p>J'ai trouvé PIU 1 : $matches[1]</p>"; } else { echo "<p>erreur : PIU 1 introuvable</p>"; } } else { echo "<p>lecture de $filename impossible</p>"; } ?>
donne :
J'ai trouvé AVU : OK J'ai trouvé PIU 1 : Not Installed
sur le contenu que tu as mentionné dans ton message d'origine. Plus de explode, de trim, de foreach, etc.
Dal