fichier texte

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #939287

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.

CrazyCat
Le #939286
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

Olivier Miakinen
Le #939285
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].


alainL
Le #939126
"Olivier Miakinen" 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



fred
Le #939127
<?
$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>';
}
}
?>
alainL
Le #939125
"Olivier Miakinen" 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



CrazyCat
Le #939123
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

hesmo
Le #939121
Esaye avec la fonction explode

$tableau=explode(";",$val);
et tu auras ton tableau avec tes 5 valeurs
$tableau[0] ....
Publicité
Poster une réponse
Anonyme