Partage
  • Partager sur Facebook
  • Partager sur Twitter

Diviser le contenu d'un fichier txt en trois table

Sujet résolu
    16 septembre 2019 à 13:44:15

    Bonjour je vous écrit ce topique car je n'arrive pas a réaliser ce que je souhaite et j’espère que grâce a votre aide ce ne sois plus le cas. Je vous explique le problème. J'ai un fichier txt contenant un fichier de configuration je récupéré l’intégralité du fichier et le mets dans un tableau. J'aimerais pouvoir mettre le nom des variables du fichier config d'en un tableau a part puis la valeur de la variable dans un autre puis les éventuelles commentaire dans un troisième. Le fichier txt ressemble a ça.

    toto = 1;
    toto1= 2;
    toto3=3; //variable importante


    Pour réaliser cela je pence faire 3 étape regarder ma chaîne de caractère caractère par caractère.
    etape 1 tout ce qui est comprit entre un retour chariot et un = c'est la variable donc tableau 1
    etape 2 tout ce qui est comprit entre un = et un ; c'est le résultat de la variable donc tableau 2
    etape 3 tout ce qui est comprit entre un ; et un retour chariot tableau 3 c'est un commentaire

    <?php
    
    
    $contenu = file_get_contents('test.txt'); 
          
        $contenu_brut = array($contenu);
        $nomVariable = array();
      $resulVariable = array();
      $comeVariable = array();
        
        $nombre_de_variables=0;
      $nombreCara = strlen($contenu);
         $file = fopen("test.txt", "r"); // ouvre le fichier
         if ($file ) // si on a bien le fichier
        {
        while (!feof($file )) //tant qu'on est pas à la fin du fichier
        {
            $ligne= fgets($file,$nombreCara); // on lit une ligne qui contien le nombre de caractere du fichier
                      if ($contenu_brut[0] != 0x0A||0x0D)
                          {
                            //$contenu_brut[0] = $nomVariable;
                array_push($nomVariable,$contenu_brut);
                            $nombre_de_variables++; // $nombre_de_variables = $nombre_de_variables + 1
                          }    
    
        }
    
        }
    print_r ($nomVariable);
    
    
    fclose($file );   // ferme le fichier
    ?>


    Merci d'avance pour votre aide si vous avez des question n’hésitez pas

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2019 à 13:48:33

      Salut,

      si ton fichier possède une syntaxe équivalente à un fichier ini:

      cle=valeur

      tu peux utiliser la fonction parse_ini_file(pathToFile,true)

      et tu obtiendra ce que tu veux ;)

      https://www.php.net/manual/fr/function.parse-ini-file.php

      • Partager sur Facebook
      • Partager sur Twitter
        17 septembre 2019 à 14:54:15

        merci pour ta réponse mais cela ne correspond pas à ce que j'ai continuer a faire j'ai modifier mon code pour sa mais cela ne marche pas

        <?php
        
        
        $contenu = file_get_contents('borne_config.txt'); 
        $nomVariable = array();
        $resulVariable = array();
        $comeVariable = array();
        
         
        
          $fp = fopen("test.txt","r");
        
        while (!feof($fp))
        {
           $caract=fgetc($fp);
           if (!feof($fp))
          // echo ($caract=="\n" ? '<br>':$caract);
           if ($caract == 0x0A||0x0D)
        	   while ($caract == 0x3D ){
        	   array_push ($nomVariable,$caract);
        	   }
        	if ($caract ==0x3D)
        		while ($caract == ';'){
        	    array_push ($resulVariable,$caract);
        		}
        	  if ($caract == ';')
        		  while ($caract == 0x0A||0x0D){
        	      array_push ($comeVariable,$caract);
        		  }
        }
        fclose($fp);
            print_r ($nomVariable);
        	print_r ($resulVariable);
        	print_r ($comeVariable);
         
        
        	
        ?>

        mais j'ai une erreur qui apparais 

        voila des idées ??? merci

        -
        Edité par FlorianJacquemont 17 septembre 2019 à 14:59:36

        • Partager sur Facebook
        • Partager sur Twitter
          17 septembre 2019 à 16:39:47

          $caract == 0x0A||0x0D c'est faux, ta condition doit toujours en être vraie (= boucle infinie).

          C'est $caract == 0x0A || $caract == 0x0D, on ne peut pas factoriser comme tu le fais, l'expression en a un tout autre sens. Et dans ces cas-là, on préfère généralement employer in_array : in_array($caract, [0x0A, 0x0D])

          > J'ai un fichier txt contenant un fichier de configuration

          Si c'est pour configurer ton application, ce serait 1000 fois mieux qu'il soit écrit en PHP.

          -
          Edité par julp 17 septembre 2019 à 16:43:19

          • Partager sur Facebook
          • Partager sur Twitter
            17 septembre 2019 à 17:01:53

            julp merci pour ta réponse je vais essaye ce que tu ma dit. Pour le fichier config non rien a voir en faite mon code va me servir a paramétrer un fichier txt qui et dans une machine.
            • Partager sur Facebook
            • Partager sur Twitter
              18 septembre 2019 à 9:16:11

              Julp j'ai pu essaye ce que tu ma dit cela fonctionne mais maintenant j'ai un autre problème .

              <?php
              $nomVariable = array();
              $resulVariable = array();
              $comeVariable = array();
              
               
              
                $fp = fopen("test.txt","r");
              
              while (!feof($fp))
              {
                 $caract=fgetc($fp);
                 if (!feof($fp))
                // echo ($caract=="\n" ? '<br>':$caract);
              	   if (in_array($caract, [0x0A, 0x0D]))
              	   while (in_array($caract [0x3D] )){
              	   array_push ($nomVariable,$caract);
              	   }
              	   
              		if (in_array($caract, [0x3D]))
              		while (in_array($caract [';'])){
              	    array_push ($resulVariable,$caract);
              		}
              		  if (in_array($caract, [';']))
              		  while (in_array($caract, [0x0A, 0x0D])){
              	      array_push ($comeVariable,$caract);
              		  }
              }
              fclose($fp);
                  print_r ($nomVariable);
              	print_r ($resulVariable);
              	print_r ($comeVariable);
                
              ?>

              le code fonctionne mais il me retourne des tableaux vides

              quelqu'un a une idée ? 

              -
              Edité par FlorianJacquemont 18 septembre 2019 à 9:16:50

              • Partager sur Facebook
              • Partager sur Twitter
                18 septembre 2019 à 22:56:20

                Bonjour,

                A mon avis ton algorithme est trop compliqué... il vaudrait mieux partir du global vers le spécifique :

                - lire le fichier ligne par ligne (avec fgets)

                - supprimer le commentaire éventuel (avec une regex? ou juste explode sur le // ou bien même sur le point-virgule ";" et ne garder que la 1ère partie)

                - explode encore sur le signe = ! tu aura alors $cle et $valeur dans un tableau: par exemple

                $tab = explode($ligne, '=') ;

                ${tab[0]} = $tab[1];

                je ne suis pas sur de cette notation de 'variable variable' avec un tableau, mais la solution est possible en théorie :) 

                • Partager sur Facebook
                • Partager sur Twitter
                  19 septembre 2019 à 9:18:02

                  Merci pifou25 pour ta raiponce mais je ne souhaite pas utiliser explode car mon code doit pouvoir s'adapter a n'importe quelle fichier de config. Je souhaite vraiment faire les boucles manuellement j'ai fait quelle modif mais rien ne change il me retourne toujours des tableaux vides  

                  <?php
                  
                  
                  $contenu = file_get_contents('borne_config.txt'); 
                  $nomVariable = array();
                  $resulVariable = array();
                  $comeVariable = array();
                  
                   
                  
                    $fp = fopen("test.txt","r");
                  
                  while (!feof($fp))
                  {
                     $caract=fgetc($fp);
                     if (!feof($fp))
                    // echo ($caract=="\n" ? '<br>':$caract);
                  	   if (in_array($caract, [0x0A, 0x0D]))
                  	   {
                  		   
                  		   array_push ($nomVariable,$caract);
                  		   while (in_array($caract [0x3D] ));
                  	   }	   
                  		if (in_array($caract, [0x3D]))
                  		{
                  			array_push ($resulVariable,$caract);
                  			while (in_array($caract [';']));
                  		}
                  		  if (in_array($caract, [';']))
                  		  {
                  			  array_push ($comeVariable,$caract);
                  			  while (in_array($caract, [0x0A, 0x0D]));
                  		  }
                  
                  }
                      print_r ($nomVariable);
                  	print_r ($resulVariable);
                  	print_r ($comeVariable);
                  
                  fclose($fp);
                  	
                  ?>

                  Personne d'autre a une idée sur le faite qu'il me renvois des tableaux vides ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 septembre 2019 à 9:53:09

                    Bonjour, 

                    Simple test, as-tu fais des echo de ta variable $caract avant de array_push ? Peut-être celles-ci sont vides et donc ton tableau reste vide ? 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 septembre 2019 à 14:34:56

                      Désoler mais j'ai repris a zero voila mon nouvelle essai 

                      <?php
                      
                      $contenu_fichier =array(); //création d'un tableau qui contiendra le contenu du fichier
                      $contenu_fichier = file_get_contents('borne_config.txt');  //le contenu du fichier et mit dans le tableau
                      $nomVariable = array();   //création du tableau contenant les noms des variables
                      $resulVariable = array(); //création du tableau contenant les resultats des variables
                      $comeVariable = array();  //création du tableau contenant les commentaires des variables
                      $conteur=0;               // conteur qui permet de verifier qu'on est pas a la fin du fichier
                      $variable=1;
                      $resultat=1;
                      $commentaire=1;
                      $nombreCara = strlen($contenu_fichier); //création de la variable qui contient le nombre de caractere du fichier
                      //echo $contenu['0'];
                      while ($conteur<$nombreCara)            //temps que le conteur et inferieur au nombre de caractere la boucle ne s'arrete pas 
                       {
                      	 
                      //	echo $contenu [$conteur];
                      	if ($contenu_fichier[$conteur]== chr(10))     
                      	{
                      		do {
                      			$nomVariable[]=$contenu_fichier[$variable];
                      			$variable=$variable+1;
                      		   }
                      		while ($contenu_fichier[$variable]== chr(61));	
                           
                      		//echo '*'; 
                      	}
                      	if ($contenu_fichier[$conteur]== chr(61))
                      	{
                      		do {
                      			$resulVariable[]=$contenu_fichier[$resultat];
                      			$resultat=$resultat+1;
                      		   }
                      		while ($contenu_fichier[$conteur]== chr(59));	
                             
                      	}
                      	if ($contenu_fichier[$conteur]== chr(59))
                      	{
                      		do {
                      			$comeVariable[]=$contenu_fichier[$commentaire];
                      			$commentaire=$commentaire+1;
                      		   }
                      		while ($contenu_fichier[$conteur]== chr(10));	
                      		
                      	}
                      	
                      	$conteur=$conteur+1;
                      	
                       }
                      print_r ($nomVariable);
                      ?>

                      le problème maintenant c'est que cela fonctionne mais pas comme je le souhaite on dirais que mes condition ne sont pas respecter le résultat

                      alors que mon debut de fichier txt est

                      VISIONOR copyright
                      
                      COM485=5	;communication carte moteur
                      COM232=6	;communication PC de gestion
                      MAINTENAN=0	; mode maintenance
                      REBOOT=0	; nombre de minutes apres minuit (0 si pas reboot)
                      VIT_X=9		;vitesse horizontale maxi
                      VIT_Y=6		;vitesse verticale maxi (avant 5)
                      VIT_Z=9		;vitesse profondeur maxi
                      VIT_W=8		;vitesse presentation maxi
                      VIT_V=8		;vitesse ouverture trappe client
                      SENS_X=1;
                      SENS_Y=0;
                      SENS_Z=1;
                      SENS_W=0;
                      SENS_V=0

                       quand je retire les lignes 

                      $variable=$variable+1;
                      $resultat=$resultat+1;
                      $commentaire=$commentaire+1;


                      et que je les mets a la fin avec

                      $conteur=$conteur+1;

                      cela fonctionne correctement mais au lieux de me mettre les noms des variables en entier il me donne juste les permiennes lettre 

                      -
                      Edité par FlorianJacquemont 19 septembre 2019 à 15:15:33

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 septembre 2019 à 15:51:38

                        On voit pas le résultat que tu obtiens, l'image est de mauvaise qualité. 

                        Je pense que tu t'emmêles pinceaux avec tes compteurs ($conteur, $variable, $resultat et $commentaire). Tu ne peux utiliser qu'une seule variable compteur pour chaque étape. Dans tes boucles regarde ce que vaut $contenu_fichier[$conteur] pour savoir quand tu dois l'incrémenter et quand utiliser tes conditions. 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 septembre 2019 à 16:04:00

                          Asuna merci pour ton aide 

                          quand je fait un echo $contenu_fichier[$conteur]; dans mon premier do il me retourne rien.

                          je suis assez perdu la je ne vois pas comment faire fonctionner mon programme comme je le souhaite.

                          quand je mets mes conteur en bas je reçois que les première lettre de mes nom de variable de mon txt  

                          comme sa 

                          Array ( [0] => [1] => C [2] => C [3] => M [4] => R [5] => V [6] => V [7] => V [8] => V [9] => V [10] => S [11] => S [12] => S [13] => S [14] => S [15] => P [16] => P [17] => P [18] => P [19] => P [20] => P [21] => P [22] => P [23] => [24] => P [25] => P [26] => P [27] => P [28] => P [29] => P [30] => P [31] => P [32] => P [33] => P [34] => P [35] => P [36] => P [37] => P [38] => P [39] => P [40] => [41] => P [42] => P [43] => P [44] => P [45] => P [46] => P [47] => P [48] => P [49] => P [50] => P [51] => P [52] => P [53] => P [54] => P [55] => P [56] => P [57] => [58] => P [59] => P [60] => P [61] => P [62] => P [63] => P [64] => P [65] => P [66] => P [67] => P [68] => P [69] => P [70] => P [71] => P [72] => P [73] => P [74] => [75] => P [76] => P [77] => P [78] => P [79] => P [80] => P [81] => P [82] => P [83] => P [84] => P [85] => P [86] => P [87] => P [88] => P [89] => P [90] => P [91] => [92] => [93] => F [94] => )

                          -
                          Edité par FlorianJacquemont 19 septembre 2019 à 16:06:23

                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 septembre 2019 à 16:23:14

                            Le soucis vient du fait que tu incrémentes mal ton compteur. Si je comprends bien ton programme, tu boucles de manière globale sur ton fichier, puis sur certaines conditions tu stockes les informations. Seulement dans tes boucles while, ton $conteur reste le même puisque tu n'y touches pas. Si tu fais un echo $conteur tu verras que quelque chose cloche. Oublie le fait d'utiliser un compteur par type de données, utilise en qu'un seul et incrémente le à chaque fois pour avancer de caractère en caractère.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 septembre 2019 à 9:39:12

                              Asuma merci pour  ton aide j'ai réussit avec 1 seul pointeur.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Diviser le contenu d'un fichier txt en trois table

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown