[RESOLU] Lecture données fichier txt

Eléphanteau du PHP | 26 Messages

20 oct. 2016, 20:37

Bonjour,
Je fait un site qui a besoin de stocker quelques variables qui changent très peu dans un fichier .txt, je parviens sans problème grâce à la fonction file de php à en lire le contenu ligne par ligne. Maintenant j'ai une variable qui est un boolean normalement mais le problème c'est qui je n'arrive pas à lui réattribuer une forme de boolean. Voici le code qui extrait les données du fichier et qui va essayer de transformet $data en variable integer avec des var_dump pour voir ce qu'il se passe.
Je n'ai pas non plus comrpis pourquoi il y a un message erreur .
<?php
    //== Récupérer données fichier ligne par ligne dans le tableau $ligne
                $s_data = file('data.txt');
   //== retirer un espace qui s'ajoute lors de la récupération des données
		 $data = trim($s_data['0'],"\t\n\r\0\x0B");

//==var dump avant transformation de $data
			var_dump($s_data,$data);

//==transformation $data
		 settype($data,integer);

//== $data après transformations
		 var_dump($data);


?>

Image

Regarder la valeur de length à chaque fois c'est curieux non ?

j'arrive pas à comprendre pourquoi ca bug
Merci de votre aide

Mammouth du PHP | 881 Messages

21 oct. 2016, 04:55

Tu ne peux pas transformer un tableau en integer.
Tu pourrais transformer une « string » en « integer », mais là t'as un tableau plein de lignes
Soyez artisans de paix

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 oct. 2016, 10:49

salut,

le message d'erreur c'est parce que tu utilises, au milieu du code "integer" ceci n'étant pas une constante php te dis qu'il considère que tu as voulu utiliser une chaîne de caractère (il est sympa quand même).
=> settype($data,'integer')

set type est peux utile sachant que php va faire l'autoboxing comme un grand.
ceci dit ce n'est pas trop grave.

j'ajoute que var_dump transforme rien, elle permet juste d'afficher le contenu d'une variable avec le type et la taille.

sinon ton code est fonctionnel
<pre>
<?php
//== Récupérer données fichier ligne par ligne dans le tableau $ligne
$s_data = file('data.txt', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
var_dump($s_data);
//== retirer un espace qui s'ajoute lors de la récupération des données
$data = trim($s_data['0'], "\t\n\r\0\x0B");
echo 'avant forçage du type<br />';
var_dump($data);
settype($data, 'integer');
echo 'après forçage du type<br />';
var_dump($data);
donnee

Code : Tout sélectionner

array(5) { [0]=> string(1) "1" [1]=> string(9) "localhost" [2]=> string(3) "bdd" [3]=> string(7) "mineyou" [4]=> string(6) "azerty" } avant forçage du type string(1) "1" aprés forçage du type int(1)[/php] J'ai ajouter les deux flags pour que file supprime les saut de lignes inutile et ne prenne pas ne compte les lignes vide (plus simple). perso je te conseillerais de stocker les données sous une forme plus intelligible pour éviter le soucis (json, clef / valeur etc). @+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 26 Messages

21 oct. 2016, 13:59

Tu ne peux pas transformer un tableau en integer.
Tu pourrais transformer une « string » en « integer », mais là t'as un tableau plein de lignes
Je n'esaye pas de tranformer le tableau entier juste l'entré n°0, effectivement le tableau entier ...

Eléphanteau du PHP | 26 Messages

21 oct. 2016, 14:08

Salut moogli,
Je sais que var_dump ne modifie pas les variables c'était juste pour les afficher et voir le problème. Donc si je comprend bien settype ne me sert à rien.
tu dis de trouver une autre méthode et tu parle de json, de clef/valeurs pourrait tu m'expliquer ce à quoi tu pense ?
Merci de votre aide

Mammouth du PHP | 881 Messages

21 oct. 2016, 14:19

Je n'esaye pas de tranformer le tableau entier juste l'entré n°0, effectivement le tableau entier ...
Oups, ça m'avait échappé. Désolé.
Pourquoi alors ne pas lire que la première ligne du fichier avec fopen et fgets ?
Soyez artisans de paix

Eléphanteau du PHP | 26 Messages

21 oct. 2016, 14:23

Parceque avec fgets tu pense que ca fonctionnerait ?
Parceque moi après j'ai d'autres données qui sont extraites donc file etait pratique

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 oct. 2016, 14:23

je ne dit pas que settype ne sert a rien. si tu utilises la comparaison avec le type alors il sert, si derrière tu fais une requête préparée et que tu indique le type cela peux servire. Mais la plus part des gens ne compares pas avec le type voir ne connaissent pas les opérateurs === et !===
php est un langage peu typé (même si php 7 permet maintenant d'utiliser le typage de façon plus obligatoire) et de ce fait il va adapter (boxing) le type au besoin.
c'est pour cela que tu peux écrire echo 'nombre '.$i; alors qui ei contient un entier
ou alors
$douze = '12'; // string
$deux = 2; // int
$dix = $douze - $deux; // int

ce que tu met dans ton fichier ressemble à des options de configuration (la je vote pour infos de connexion à la base ?).
les options de configuration ont les mets dans des fichiers structurés pour une utilisation simple (a remplir et a exploiter).

clé / valeur : c'est le classique toto=tata (host=localhost) avec une valeur par ligne
json : ben du json (wikipedia, google etc si tu ne connais pas ;))
c'est assez en vogue en vogue en ce moment (node, composer etc etc).
donc une fichier
{
"host":"localhost",
"toto":"tata"
}

L'avantage du json c'est qu'il va te permettre de décrire des objets alors que le clef valeur non.
{
"sgbd" : {
"host":"localhost",
"port":3306,
"user":"toto",
"mdp":"tata"
},
"autrechose" : {
"unsousobjet": {
"toto":"tata",
"titi":"tutu"
}
}
}
ensuite tu utilse json_decode et tu as un objet php qui va te permettre d’accéder à ta configuration :
$conf = json_decode('conf.json');
$conf ->sgbd->host
$conf ->sgbd->user
etc.

Après dans le cas des informations de connexion à la base de données il est préférable de définir des constantes dans un fichier php et d'inclure ce fichier au bon endroit ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 26 Messages

21 oct. 2016, 14:37

J'ai trouvé le problème un p***** de bug de mon application que j'utilise pour coder, il met met des point tous seul partout et je viens d'en trouver un dans mon fichier data d'ou la longueur curieuse de mon string mais le problème est réglé je ne vais plus l'utiliser vu les problème qu'il me cause (c'est codiad )
Merci d'avoir essayer de m'aider

Eléphanteau du PHP | 26 Messages

21 oct. 2016, 14:39

Je croit que je vais suivre tes conseil et utiliser json ça a l'air pas mal même qi j'ai résolus mon problème

Mammouth du PHP | 881 Messages

21 oct. 2016, 14:41

Alors, tu passes en « Résolu » svp.
Soyez artisans de paix

Eléphanteau du PHP | 26 Messages

21 oct. 2016, 14:47

Oui