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
$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.
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.
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 ?
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
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.
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
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.
Asuma merci pour ton aide j'ai réussit avec 1 seul pointeur.
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.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli