Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fichier texte

8 réponses
Avatar
alainL
Bonjour,
Je voudrais récupérer les données d'un fichier texte composé de 5 données de
longueurs variables séparées par ";" par ligne.
J'obtiens un tableau des lignes entières mais je ne parviens pas à séparer
les données de chq ligne
l'instruction tab(split.....) produit unexpected '='
______________________________________________________________________________________
<? $Ffl = "listefleurs.txt";

if (file_exists($Ffl)) {

$tableau = file($Ffl);

while(list($cle,$val) = each($tableau)) {
echo $val."<br>";
tab=split($val,";");
echo tab(0);'<br>';
echo tab(1);'<br>';
echo tab(2);'<br>';
echo tab(3);'<br>';
echo tab(4);'<br>';
}
}
?>
______________________________________________________________________
J'ai aussi essayé eregi(";",$val) mais ça ne va pas non plus.
Un coup de main serait le bienvenu !
Merci

alain

8 réponses

Avatar
Olivier Miakinen

Je voudrais récupérer les données d'un fichier texte composé de 5 données de
longueurs variables séparées par ";" par ligne.


As-tu essayé fgetcsv ?
http://fr3.php.net/manual/fr/function.fgetcsv.php

while(list($cle,$val) = each($tableau)) {


Je n'ai jamais utilisé each() que je trouve assez peu intuitif.
Personnellement je préfère la construction foreach :
http://fr3.php.net/manual/fr/control-structures.foreach.php

Un coup de main serait le bienvenu !


Si tu ne t'en sors toujours pas, donne-nous au moins en exemple trois ou
quatre lignes extraites du fichier.

Avatar
CrazyCat
alainL wrote:
tab=split($val,";");


Si tu veux affecter la *variable* tab, c'est donc $tab = split()...
Et mieux, $tab = explode(";", $val);

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr

Avatar
Olivier Miakinen
alainL wrote:
tab=split($val,";");


Si tu veux affecter la *variable* tab, c'est donc $tab = split()...
Et mieux, $tab = explode(";", $val);


Bon sang, mais c'est bien sûr ! Et pour lire le premier élément, ce
n'est pas tab(0), ni même $tab(0), mais $tab[0].


Avatar
alainL
"Olivier Miakinen" <om+ a écrit dans le message de groupe
de discussion : 4798a3d0$
alainL wrote:
tab=split($val,";");


Si tu veux affecter la *variable* tab, c'est donc $tab = split()...
Et mieux, $tab = explode(";", $val);


Bon sang, mais c'est bien sûr ! Et pour lire le premier élément, ce
n'est pas tab(0), ni même $tab(0), mais $tab[0].



Plus léger que ma trouvaille de l'après midi:
__________________________________________________________________
<? $Ffl = "listefleurs.txt";

if (file_exists($Ffl)) {

$tableau = file($Ffl);

while(list($cle,$val) = each($tableau)) {

#echo $val."<br>";
$tab=split(";",$val);
echo $tab[0],'<br>';
echo $tab[1],'<br>';
echo $tab[2],'<br>';
echo $tab[3],'<br>';
echo $tab[4],'<br>';
}
}
?>
______________________________________________________________
J'utilisais le quotage de VB ! tab(0)
alain



Avatar
fred
<?
$File = "listefleurs.txt";

if (file_exists($File))
{
$tableau = file($File);
$tmp=count($tableau);
$i=0
while($tmp>$i)
{
$tab=explode (";",$tableau[$i]);
$i++;
echo "ligne: ".$i;
echo $tab[0].'<br>';
echo $tab[1].'<br>';
echo $tab[2].'<br>';
echo $tab[3].'<br>';
echo $tab[4].'<br>';
}
}
?>
Avatar
alainL
"Olivier Miakinen" <om+ a écrit dans le message de groupe
de discussion : 4798a3d0$
alainL wrote:
tab=split($val,";");


Si tu veux affecter la *variable* tab, c'est donc $tab = split()...
Et mieux, $tab = explode(";", $val);


Bon sang, mais c'est bien sûr ! Et pour lire le premier élément, ce
n'est pas tab(0), ni même $tab(0), mais $tab[0].


Merci pour vos réponses.
Finalement, j'avais accouché de ça, qui marche mais qui me semble assez
lourd ....
Je vais regarder vos propositions.
____________________________________________________________________________
<? $Fnm = "listefleurs.txt";
$inF = fopen($Fnm,"r");

for ($i=1;$i<10;$i++) {

$ligne[$i] = fgets($inF, 4096); #lit jusqu'à n ou end
echo $ligne[$i],'<br>' ; # controle: ecrit la ligne
$donneesligne[$i]=split(";",$ligne[$i]); # découpe aux ;
$numligne[$i]=$donneesligne[0];
$imgligne[$i]=$donneesligne[1];
$nvligne[$i]=$donneesligne[2];
$nfligne[$i]=$donneesligne[3];
$nffligne[$i]=$donneesligne[4];
echo $numligne[$i],'<br>';
echo $imgligne[$i],'<br>';
echo $nvligne[$i],'<br>';
echo $nfligne[$i],'<br>';
echo $nffligne[$i],'<br>';

$ptr = ftell($inF); # position du pointeur

$ptr = fseek($inF,$ptr+0); # modifiée : part de l'octet suivant

}

fclose($inF); ?>
___________________________________________________________________________________

3 lignes de listefleurs.txt:
1;aconit_napel_2.jpg;Aconit napel;Aconit tue-loup;Crocus nudiflorus
2;aconit_tue_loup_2.jpg;Aconit tue-loup;Hépatique;Daboécie
3;adenostyle_2.jpg;Adénostyle;Horminelle;Daphné
___________________________________________________________________________________
Mon but : un quizz proposant des images (aléatoires) à reconnaître...
Je reviendrai sûrement :-)))
Bonne soirée
alain



Avatar
CrazyCat
Je reviens vite fait sur cette discussion pour apporter quelques précisions.

Olivier Miakinen wrote:
As-tu essayé fgetcsv ?
http://fr3.php.net/manual/fr/function.fgetcsv.php


N'est pas forcémment disponible sur tous les serveurs, mais c'est
effectivement la solution la plus simple.

Je n'ai jamais utilisé each() que je trouve assez peu intuitif.
Personnellement je préfère la construction foreach :
http://fr3.php.net/manual/fr/control-structures.foreach.php


Une boucle while sur un each() est plus rapide d'après des tests que
j'avais lu (je tacherais de retrouver le lien).

alainL wrote:
<? $Fnm = "listefleurs.txt";
$inF = fopen($Fnm,"r");
for ($i=1;$i<10;$i++) {

$ligne[$i] = fgets($inF, 4096); #lit jusqu'à n ou end
echo $ligne[$i],'<br>' ; # controle: ecrit la ligne
$donneesligne[$i]=split(";",$ligne[$i]); # découpe aux ;
$ptr = ftell($inF); # position du pointeur
$ptr = fseek($inF,$ptr+0); # modifiée : part de l'octet suivant
}
fclose($inF); ?>


C'est très lourd comme code, du moins très peu optimisé.
Tout d'abord, utilise plutôt explode() que split(), tu n'as pas besoin
de la puissance des regexps.
Ensuite, forcer le nombre de lignes n'est pas une très bonne idée.

Pour ma part, je ferais:
<?
$inF = fopen('listefleurs.txt', 'r');
$donnees = array();
while(!feof($inF) {
$ligne = fgets($inF, 4096);
$donnes[] = explode(";", $ligne);
}
fclose($inF);
?>

Cela te permettra d'avoir un tableau $donnes à 2 dimensions contenant
l'intégralité de ton fichier:
array(
[0] => array (
[0] => "1"
[1] => "aconit_napel_2.jpg"
[2] => "Aconit napel"
[3] => "Aconit tue-loup"
[4] => "Crocus nudiflorus"
)
[1] => array (
[0] => "2"
[1] => "aconit_tue_loup_2.jpg"
[2] => "Aconit tue-loup"
[3] => "Hépatique"
[4] => "Daboécie"
)
[2] => array (
[0] => "3"
[1] => "adenostyle_2.jpg"
[2] => "Adénostyle"
[3] => "Horminelle"
[4] => "Daphné"
)
)

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr

Avatar
hesmo
Esaye avec la fonction explode

$tableau=explode(";",$val);
et tu auras ton tableau avec tes 5 valeurs
$tableau[0] ....