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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 17 juil. 2013 à 17:21
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
<?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:

4 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
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 :

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
0
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
<?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
0
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
<?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 " }
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
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 :

<?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
0