Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2011, 22h52   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
Par défaut Un classique : prendre des éléments dans un fichier texte

Bonjour à tous,

Ceci est mon tout ...mais vraiment tout premier code en php.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<HTML><body>
<?php
$ouvre=fopen("donnée1.txt","r");  // ouverture du fichier
while (!feof ($ouvre))          // tant que pas en fin de fichier	
{
 
$lecture = fgets($ouvre, 4096); // stockage dans $lecture
$donnee=explode("|",$lecture);  // parsing des données basé sur "|")
 
$combien=count($donnee)-1; // nbre d'éléments séparés par "|"
echo "<b>Ce fichier contient ",$combien," données : </b><br><br>";
 
for ($i=0;$i<=$combien;$i++)
	{
echo $donnee[$i],"<br>";  // affichage des données
	}
 
	}
 
echo $donnee[0]; // affiche la données 0
echo " ";
echo $donnee[1]; // affiche la donnée 1
echo " ";
echo $donnee[480]; // affiche la donnée 480
 
 
fclose($ouvre);		// fermeture
?>
</body></HTML>
L'objectif de ce code est d'aller chercher dans un fichier texte des données spécifiques (ici 0 1 et 480), la finalité la reconstruction d'une table sous access mais la n'est pas ma demande d'aide.

le fichier texte est composé de ligne comprenant une données par ligne avec un séparateur par champs.

ex de fichier texte :

a1|b|c|d....|489eme données.
a2|b|c|d....|489eme données.
a3|b|c|d....|489eme données.
etc etc

Mon hic je n'ai pas trouvé d'info sur comment dire à mon petit programme comment lire chaque ligne et me faire mon tableau pour chaque ligne... ( me dire si ce n'est pas clair)

En gros je fait comment pour qu'il recompose mes echo de la fin en une seule page pour chaque ligne et pas mise bout à bout?

Merci d'avance pour votre aide ET/OU correction.
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 22h55   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Hello, deja ton fichier c'est du CSV donc utilise fgetcsv, ensuite si tu veus faire un saut de ligne utilise un <br /> html, et utilise implode pour afficher tout l'array
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 18h33   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
Je vais tester cela merci
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 20h27   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
Bon en fait je n'obtient pas le résultat recherché.

en fait mon fichier initial de données est de la forme indiqué plus haut et je veux juste afficher pour chaque ligne les données voulu en reprenant au depart de chaque ligne du fichier source le comptage.

ex :

Source :

a1|b|c|d....|489eme données.
a2|b|c|d....|489eme données.
a3|b|c|d....|489eme données.

Etat souhaité :

a1 c
a2 c
a3 c ..

en bref choisir les valeurs identique sur chaque ligne.

Avec ce que tu m'as donné il semble que cela ne correspond pas. (ou alors je n'ai pas compris)
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h03   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
tu veux afficher les données les colonnes predefinie : colonne 1 colonne 3 et colonne 480 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 10h24   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
en fait pour chaque ligne du fichier je veux qu'il me prenne les valeurs des champs que je définis ex ici 1 2 et 489 en fonction de ce que je lui demanderai

mon hic est que la il considère que tout les champs sont cote à cote de fait 1 2 489 fonctionne mais ensuite ca donne 490 491 978 pour la série suivante. donc il ne prend pas chaque ligne de manière indépendante.

de plus sur certaine ligne je n'ai pas 489 champs voial pourquoi je veux qu'il prenne ligne par ligne.

j'espère avoir été clair.

de fait j'en reviens à me dire que la réponse à ta question est oui lol.
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2011, 21h13   #7
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
Re

En fait j'ai trouvé un bout de code sur le net qui répond au données suivantes ( en gros cela répond au même problème que moi):

Code :
1
2
3
4
date;heure;temp Ext;hum E;atmo;vent;rafale  
28/01/2008;05:00;4.2;94;1029.4;22.3;39.5
28/01/2008;05:05;4.2;94;1029.3;22.5;40.1
89/01/2008;05:10;4.1;94;1029.2;20.4;28.5
et le code qui doit normalement faire ce que je souhaite :

Code :
1
2
3
4
5
6
7
8
9
10
11
<?php
 $fichier = "actuel_donnees.txt";
$content=file ($fichier);
 list($date, $heure, $temp, $hum, $atmo, $vent, $rafale)= $content;
 
$lastLine=$content[count($content)-1];
 
list($info1, $info2, $info3, $info4, $info5, $info6, $info7 )= explode(';', $date);
 
echo $date, '<hr/>' .... ce code la tu peux le faire toi meme;
?>
Mais curieusement j'ai une erreur de parse en dernière ligne une idée?
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2011, 21h44   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
c'est du CSV utilise fgetcsv comme je t'ai dis pas besoin de bidouille
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 18h09   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
fgetcsv te revoie un array pour chaque ligne, regarde les exemples dans la doc
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 21h49   #10
Membre chevronné
 
Avatar de micetf
 
Homme Fred
Professeur des Ecoles
Inscription : mai 2009
Messages : 503
Détails du profil
Informations personnelles :
Nom : Homme Fred
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Professeur des Ecoles
Secteur : Enseignement

Informations forums :
Inscription : mai 2009
Messages : 503
Points : 701
Points : 701
Bonjour,
Cela n'est pas étonnant que tu aies PARSE ERROR... sur la dernière ligne du bout de code que tu as trouvé :
Code :
echo $date, '<hr/>' .... ce code la tu peux le faire toi meme;
puisque " .... ce code la tu peux le faire toi meme" n'est certainement pas compris par le parseur PHP.
Personnellement, je traiterais ton problème en adaptant le code suivant :
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
$lignes=file('donnees.txt');
echo '<p>Ce fichier contient '.count($lignes).' données.</p>';
 
foreach ($lignes as $ligne) {
	$donnee=explode("|",trim($ligne)); 
	echo $donnee[0];
	echo ' ';
	echo $donnee[1];
	echo ' ';
	echo $donnee[480];
	echo '<br>';
}
Fred
micetf est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/02/2011, 22h00   #11
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
Un grand merci cela fonctionne à merveille !

Sinon pour info même en retirant .... ce code la tu peux le faire toi meme;
j'avais l'erreur.

Encore merci pour votre aide !
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 22h05   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par micetf Voir le message
Bonjour,
Cela n'est pas étonnant que tu aies PARSE ERROR... sur la dernière ligne du bout de code que tu as trouvé :
Code :
echo $date, '<hr/>' .... ce code la tu peux le faire toi meme;
puisque " .... ce code la tu peux le faire toi meme" n'est certainement pas compris par le parseur PHP.
Personnellement, je traiterais ton problème en adaptant le code suivant :
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
$lignes=file('donnees.txt');
echo '<p>Ce fichier contient '.count($lignes).' données.</p>';
 
foreach ($lignes as $ligne) {
	$donnee=explode("|",trim($ligne)); 
	echo $donnee[0];
	echo ' ';
	echo $donnee[1];
	echo ' ';
	echo $donnee[480];
	echo '<br>';
}
Fred
il va faire la tronche php niveau mémoire si tu utilises file (et le trim sert a rien, l'option c'est FILE_IGNORE_NEW_LINES)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$lignes = fopen('donnees.txt', 'r');
 
$line = 0;
 
ob_start();
 
while($ligne = fgetcsv($lignes, 0, '|')) 
{
    echo $donnee[0], ' ', $donnee[1], ' ', $donnee[480], '<br />';
    ++$line;
}
 
fclose($lignes);
 
$out = ob_get_clean();
echo "<p>Ce fichier contient $line données.</p>";
echo $out;
le mieux étant d'utiliser SplFileObject
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 10h24   #13
Invité de passage
 
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 1
Points : 1
humm petit question complémentaire pour choisir uniquement la fin d'une ligne il faut utiliser quelle fonction?

(le code du dessus fonctionne à merveille mais je découvre que pour finir mes lignes n'ont pas toutes le même nombre de champs )
DkA59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 15h17   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par DkA59 Voir le message
humm petit question complémentaire pour choisir uniquement la fin d'une ligne il faut utiliser quelle fonction?

(le code du dessus fonctionne à merveille mais je découvre que pour finir mes lignes n'ont pas toutes le même nombre de champs )
pour choisir la fin c'est avec end
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h44.


 
 
 
 
Partenaires

Hébergement Web