Traitement d'un fichier texte avec PHP
Fermé
baymard
Messages postés
29
Date d'inscription
vendredi 21 juin 2013
Statut
Membre
Dernière intervention
13 août 2013
-
17 juil. 2013 à 12:13
[Dal] Messages postés 6202 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 14 janvier 2025 - 17 juil. 2013 à 17:21
[Dal] Messages postés 6202 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 14 janvier 2025 - 17 juil. 2013 à 17:21
A voir également:
- Traitement d'un fichier texte avec PHP
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
4 réponses
[Dal]
Messages postés
6202
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 janvier 2025
1 097
17 juil. 2013 à 12:56
17 juil. 2013 à 12:56
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
baymard
Messages postés
29
Date d'inscription
vendredi 21 juin 2013
Statut
Membre
Dernière intervention
13 août 2013
Modifié par baymard le 17/07/2013 à 15:33
Modifié par baymard le 17/07/2013 à 15:33
<?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
baymard
Messages postés
29
Date d'inscription
vendredi 21 juin 2013
Statut
Membre
Dernière intervention
13 août 2013
Modifié par baymard le 17/07/2013 à 15:57
Modifié par baymard le 17/07/2013 à 15:57
<?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 " }
[Dal]
Messages postés
6202
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 janvier 2025
1 097
Modifié par [Dal] le 17/07/2013 à 17:23
Modifié par [Dal] le 17/07/2013 à 17:23
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