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 :

Récupérer les x dernieres données d'une ligne dans un fichier txt [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 Récupérer les x dernieres données d'une ligne dans un fichier txt
    Bonjour,

    Après beaucoup de recherche infructueuse je me tourne vers vous afin de savoir si l'un d'entre vous peux m'aider.

    Voici ma difficulté ( je suis super débutant ;p ) je cherche à récupérer les x dernières valeurs d'une ligne dans un fichier texte mais je ne sais absolument pas quelle fonction utiliser.

    Voiçi le code que j'utilise :

    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
    30
    31
    $lignes=file('donnée1.txt');
    echo '<p>Ce fichier contient '.count($lignes).' données.</p>';
     
    foreach ($lignes as $ligne) {
    	$donnee=explode("|",trim($ligne));
    //	var_dump($donnee); 
    	echo $donnee[0];
    	echo ' ';
    	echo $donnee[1];
    	echo ' ';
    	echo $donnee[2];
    	echo ' ';
    	echo $donnee[18];
    	echo ' ';
    	echo $donnee[24];
    	echo ' ';
    	echo $donnee[23];
    	echo ' ';
    	echo $donnee[19];
    	echo ' ';
     
    //	echo $lignes[sizeof($lignes)-1]; //retourne le dernier enregistrement du tableau
     
     
    	Echo end(explode("|",$ligne));
     
     
     
    	echo '<br>';
     
     }
    Mon fichier source est de la forme suivante :

    011|00017|1020|TSA|30013|196 AVENUE THIERS|0820|1426|BP|29|47558043700501|tjehhvsi

    Mon problème est que ce code fonctionne parfaitement pour mais le
    echo $lignes[sizeof($lignes)-1];
    ne me renvoi que le dernier champ soit un espace vide.

    Ici par exemple je voudrais récupérer les 3 derniere valeur cad "29|47558043700501|tjehhvsi" et les afficher comme ceci "29 47558043700501 tjehhvsi"

    une idée?

    Merci de votre aide.

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    J'ai pas tout compris et ai plusieurs remarques ...

    1) Utilises count à la place du sizeOf

    2) Si tu as une ligne dans le genre
    011|00017|1020|TSA|30013|196 AVENUE THIERS|0820|1426|BP|29|47558043700501|tjehhvsi
    Tu ne peux faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	echo $donnee[18];
    	echo ' ';
    	echo $donnee[24];
    	echo ' ';
    	echo $donnee[23];
    	echo ' ';
    	echo $donnee[19];
    	echo ' ';
    tu seras pas dans les bonnes limites (mais j'ai du comprendre non !)

    echo $lignes[sizeof($lignes)-1];
    Te renvera le dernier champ effectivement du fichier car tu utilises $lignes et non $ligne. De mêê pour les trois derniers se seront donc -3, -2, -1 !!!

    Bref nous avons besoin de précisions ...

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Essaie un truc comme ça :
    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
    <?php
      $nbChampaRecuperer = 3;
      $ressource = fopen('test.txt', 'r');
     
      while (($data = fgetcsv($ressource, 1000, "|")) !== FALSE) 
      {
        $nbChamp = sizeof($data);
     
        $ligne = '';
        $c = $nbChamp - $nbChampaRecuperer;
        while ($c < $nbChamp)
        {
          $ligne .= $data[$c] . ' ';
          $c ++;
        }
        echo trim($ligne) . '<br />';
      }
      fclose($ressource);
     
      exit;
    ?>

  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
    Merci Jeca pour ta réponse :
    Je viens de tester ton code voici l'erreur que je suis incapable de corriger :

    Notice: Undefined offset: 6 in E:\Soft\EasyPHP-5.3.9\www\parser\parserforum.php on line 4

    Notice: Undefined offset: 5 in E:\Soft\EasyPHP-5.3.9\www\parser\parserforum.php on line 4

    Notice: Undefined offset: 4 in E:\Soft\EasyPHP-5.3.9\www\parser\parserforum.php on line 4
    date;heure;tempExt;humE;atmo;vent;rafale

  5. #5
    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
    Merci Fench pour ta réponse en fait je vais être plus clair :


    mon fichier texte est composé comme suit :

    011|00001|1020|TSA|30013|196 AVENUE d'italie|0820|1426|BP|29|47558043700501|tjehhvsi
    011|00045|1020|TSA|30013|196 AVENUE THIERS|0820|1426|BP|29|47558043700501|tjehhi
    011|00199|1020|TSA|30013|196 AVENUE jaures|0820|1426|BP|29|47558043700501|tjehhvsi|"vide"|"vide"|
    .... etc etc
    Ce que je veux faire c'est afficher le 2 premiers champs sans le délimiteur
    Avec les X dernières données, SAUF QUE ( et oui forcément), les lignes n'ont pas toutes le même nombre de champs (cf exemple ligne 3) du coup je veux afficher les derniers Champs ou il y a une valeurs.

    011 00001 47558043700501 tjehhvsi
    011 00045 47558043700501 tjehhi
    011 00199 47558043700501 tjehhvs
    Suis je plus clair?

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ok,

    Ce que tu peux faire, c'est pour chaque $ligne de $lignes, tu prends le nombre de champ de la ligne par un count ou le sizeOf. Ensuite pour chacune de ces lignes, tu boucles sur le dernier élément (count-1) si celui ci est différent de null alors tu le prends puis de même avec (count-2) puis de même avec count -3) Tant que tu as pas les trois dernier non vide

    Bon j'ai pas fait l'algo mais comme tu es entrain d'apprendre, fais en un puis nous verrons. (En gros une boucle sur les lignes ET sur chaque ligne une boucle avec une condition d'arrêt).

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    J'avais pas vu, en gros c'est le code de jeca avec une condition en plus sur le cas des "vide" ... Là tu as tout

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    J'ai testé avec cette ligne :
    011|00017|1020|TSA|30013|196 AVENUE THIERS|0820|1426|BP|29|47558043700501|tjehhvsi
    répétée 50 fois dans un fichier ".txt", et je n'ai aucun problème.

    Voici le résultat (la 1è colonnes est le numéro de ligne) :
    1 29 47558043700501 tjehhvsi
    2 29 47558043700501 tjehhvsi
    3 29 47558043700501 tjehhvsi
    4 29 47558043700501 tjehhvsi
    5 29 47558043700501 tjehhvsi
    6 29 47558043700501 tjehhvsi
    7 29 47558043700501 tjehhvsi
    8 29 47558043700501 tjehhvsi
    9 29 47558043700501 tjehhvsi
    10 29 47558043700501 tjehhvsi
    11 29 47558043700501 tjehhvsi
    12 29 47558043700501 tjehhvsi
    13 29 47558043700501 tjehhvsi
    14 29 47558043700501 tjehhvsi
    15 29 47558043700501 tjehhvsi
    16 29 47558043700501 tjehhvsi
    17 29 47558043700501 tjehhvsi
    18 29 47558043700501 tjehhvsi
    19 29 47558043700501 tjehhvsi
    20 29 47558043700501 tjehhvsi
    21 29 47558043700501 tjehhvsi
    22 29 47558043700501 tjehhvsi
    23 29 47558043700501 tjehhvsi
    24 29 47558043700501 tjehhvsi
    25 29 47558043700501 tjehhvsi
    26 29 47558043700501 tjehhvsi
    27 29 47558043700501 tjehhvsi
    28 29 47558043700501 tjehhvsi
    29 29 47558043700501 tjehhvsi
    30 29 47558043700501 tjehhvsi
    31 29 47558043700501 tjehhvsi
    32 29 47558043700501 tjehhvsi
    33 29 47558043700501 tjehhvsi
    34 29 47558043700501 tjehhvsi
    35 29 47558043700501 tjehhvsi
    36 29 47558043700501 tjehhvsi
    37 29 47558043700501 tjehhvsi
    38 29 47558043700501 tjehhvsi
    39 29 47558043700501 tjehhvsi
    40 29 47558043700501 tjehhvsi
    41 29 47558043700501 tjehhvsi
    42 29 47558043700501 tjehhvsi
    43 29 47558043700501 tjehhvsi
    44 29 47558043700501 tjehhvsi
    45 29 47558043700501 tjehhvsi
    46 29 47558043700501 tjehhvsi
    47 29 47558043700501 tjehhvsi
    48 29 47558043700501 tjehhvsi
    49 29 47558043700501 tjehhvsi
    50 29 47558043700501 tjehhvsi

  9. #9
    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
    Alors la toutes mes confuses.....

    j'ai éteins hier soir mon mode boulet placé sur ON.... en fait ton code fonctionne parfaitement JECA.... je me suis juste trompé de fichier php....en voulant tester le tiens j'en ai testé un des miens....d'ou le message d'erreur qui n'a rien a voir.

    Merci à tous cela fonctionne très bien.

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    @jeca
    J'ai testé avec cette ligne :

    Citation:
    011|00017|1020|TSA|30013|196 AVENUE THIERS|0820|1426|BP|29|47558043700501|tjehhvsi

    répétée 50 fois dans un fichier ".txt", et je n'ai aucun problème.
    Ton code est bon sauf pour les cas vides qu'il faut virer (voir ma remarque d'hiers) avec exemple:
    011|00199|1020|TSA|30013|196 AVENUE jaures|0820|1426|BP|29|47558043700501|tjehhvsi|"vide"|"vide"|

    Il faut ajouter une condition sur le $data[$c] pour éviter d'incrémeenter $c dans le cas des vide

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Citation Envoyé par Fench Voir le message
    @jeca


    Ton code est bon sauf pour les cas vides qu'il faut virer (voir ma remarque d'hiers) avec exemple:
    011|00199|1020|TSA|30013|196 AVENUE jaures|0820|1426|BP|29|47558043700501|tjehhvsi|"vide"|"vide"|

    Il faut ajouter une condition sur le $data[$c] pour éviter d'incrémeenter $c dans le cas des vide
    C'est exact mais si, dans un fichier texte avec délimiteur de champs, je récupère ce genre de ligne, la première chose que je ferais serait de regarder ce qui ne va pas dans la génération de ce fichier, car a priori, chaque ligne est censée contenir le même nombre de champs.

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    chaque ligne est censée contenir le même nombre de champs.
    voir la remarque de dKA59

    Avec les X dernières données, SAUF QUE ( et oui forcément), les lignes n'ont pas toutes le même nombre de champs (cf exemple ligne 3) du coup je veux afficher les derniers Champs ou il y a une valeurs.

  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
    En fait je ne me suis pas embeté j'ai tous simplement pris plus de 3 champs à la fin histoire d'avoir l'ensemble des mes données et je les retravaille ensuite pour les injecter dans une table access.

    En gros je créer une fichier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ob_start();
    $fichier = fopen("fichierexport.txt","w");
    fwrite($fichier, ob_get_contents());
    fclose($fichier);
    ob_end_flush();
    Puis je l'injecte sous access.

    Par contre (à par utiliser Java), est il possible de créer une pop up en php pour aller sélectionner un fichier?

    Histoire de remplacer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $ressource = fopen('fichiersource', 'r');
    par une popup de sélection.


    humm ...Pas sur que cela concerne le meme sujet mais dans le doute je ne réouvre pas un nouveau sujet.

  14. #14
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Regardes du côté du html: <input type=file .... />

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

Discussions similaires

  1. extraire les données d'une table dans un fichier .txt
    Par KilKennY dans le forum Développement
    Réponses: 3
    Dernier message: 24/04/2009, 16h14
  2. Modifier une ligne dans un fichier txt en java
    Par nihad510 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 09/10/2007, 22h08
  3. Réponses: 1
    Dernier message: 21/08/2007, 08h25
  4. Suppression d'une ligne dans un fichier txt
    Par EvaristeGaloisBis dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/07/2007, 17h58
  5. suprimmer une ligne dans un fichier .txt
    Par Totuch dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/06/2007, 11h28

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