IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Un classique : prendre des éléments dans un fichier texte [Encodage]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    Je vais tester cela merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    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)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu veux afficher les données les colonnes predefinie : colonne 1 colonne 3 et colonne 480 ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    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.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est du CSV utilise fgetcsv comme je t'ai dis pas besoin de bidouille

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fgetcsv te revoie un array pour chaque ligne, regarde les exemples dans la doc

  10. #10
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    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 !

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Commercial
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    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 )

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDOM] Ajouter des éléments dans un fichier XML
    Par pitchu dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 25/12/2015, 10h06
  2. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  3. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  4. [langage] [PERL] prendre des infos dans un fichier log
    Par osiris73 dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2005, 16h42
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo