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   -
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention  
 
<?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   Statut Membre Dernière intervention  
 
<?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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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