Discussion:
fichier texte
(trop ancien pour répondre)
alainL
2008-01-24 12:44:14 UTC
Permalink
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
Olivier Miakinen
2008-01-24 13:51:41 UTC
Permalink
Post by alainL
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
Post by alainL
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
Post by alainL
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
2008-01-24 13:54:22 UTC
Permalink
Post by alainL
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
2008-01-24 16:56:51 UTC
Permalink
Post by CrazyCat
Post by alainL
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
2008-01-24 20:35:06 UTC
Permalink
Post by Olivier Miakinen
Post by CrazyCat
Post by alainL
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
alainL
2008-01-25 09:03:01 UTC
Permalink
Post by Olivier Miakinen
Post by CrazyCat
Post by alainL
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
2008-01-25 10:18:38 UTC
Permalink
Je reviens vite fait sur cette discussion pour apporter quelques précisions.
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Je n'ai jamais utilisé each() que je trouve assez peu intuitif.
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).
Post by Olivier Miakinen
<? $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
fred
2008-01-24 20:35:06 UTC
Permalink
<?
$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>';
}
}
?>
hesmo
2008-01-26 22:18:50 UTC
Permalink
Esaye avec la fonction explode

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

Continuer la lecture sur narkive:
Loading...