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

PHP & Base de données Discussion :

lecture d'un fichier avec variable aléatoire.


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut lecture d'un fichier avec variable aléatoire.
    Bonjour,

    je dois afficher sur ma page php dans un formulaire des données .
    Pour cela je dois lire un fichier .txt et en extraire des données .
    Je vous explique :

    exemple du txt et données a lire :

    l1. 14/08/12; 3785 ; 1; 24
    l2. 14/08/12; 3785 ; 2; 18
    l3. 14/08/12; 3785 ; 3; 42
    l4. 14/08/12; 3785 ; 4; 80
    l5. 15/08/12; 3785 ; 1; 25
    l6. 15/08/12; 3785 ; 2; 48
    l7. 15/08/12; 3785 ; 3; 60

    Le but étant de lire simplement les 2 données qui sont en rouge et de les afficher une a une sur la page php.

    avec ce code j'arrive a les lires :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $num_ligne=6;
    $fichier = file('monfichier.txt'); //ouvre le fichier texte.
    echo(""); //test.
    $position=explode(";",$fichier[$num_ligne-1]); //permet de chercher la ligne souhaitée et utilise le ; pour differencier chaque champ.
    $variable=$position[12-1]; //affiche le champ 4.
    print floatval (trim($variable));//trim permet de supprimer les espaces et floatval permet de conserver uniquement que des chiffres.
     
    ?>

    seulement le problème c'est que j'utilise une ligne et une colonne précise , alors qu'il faudrait que se soit des variables car mon fichier texte varie en permanence je ne peut donc pas savoir a quelle ligne sera ma données par contre la colonne reste identique .

    si quelqu’un pourrait m'aider se serait vraiment sympa .

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Il s'agit de trouver les valeurs 80 et 60 en fait ?

    Si c'est le cas tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $handle = fopen('mon_fichier.txt', 'r');
    while ($line = fgets($handle)) {
      $pieces = explode(';', $line);
      if (in_array(array_pop($pieces), array('80','60'))
        echo $line;
    }

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Récupérer la 4ème valeur de la dernière ligne de chaque jour, c'est ça ?

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Mais comment fais-tu pour déterminer les lignes à lire ? quelle logique doit suivre ton algorithme ?

  5. #5
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $handle = fopen('mon_fichier.txt', 'r');
    $tmp = "";
    while ($line = fgets($handle)) {
      $pieces = explode(';', $line);
      if( $pieces[2] == 1 )
      {
        echo $tmp; // affichage de la valeur de la ligne précédente
      }
      $tmp = $pieces[3]; // sauvegarde de la valeur
    }
    Ceci pourrait-il aller ? (non testé)

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ok, c'est toujours pas super clair mais je crois comprendre ce que tu cherches à faire: tu as un ensemble de lignes dont une colone est un index qui va de 1 à n et qui peut revenir à 1 (j'imagine que chaque "bloc" d'index 1-n caractérise un jour un truc du genre). Il faut que tu obtiennes la dernière colonne du dernier ensemble de lignes numérotés de 1 à n c'est ça ?

    Si c'est effectivement le cas, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $handle = fopen('mon_fichier.txt', 'r');
    $res = array();
    $current_block = 0;
    while ($row = fgetcsv($handle)) {
      if ($row[2] == 1) $current_block ++; // bloc suivant
      $res[$current_block] = $row[3];
    }
    var_dump($res);
    Donc immaginon qu'on ait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    l1. 14/08/12; 3785 ; 1; 24
    l2. 14/08/12; 3785 ; 2; 18
    l3. 14/08/12; 3785 ; 3; 42
    l4. 14/08/12; 3785 ; 4 ; 80
    l5. 15/08/12; 3785 ; 1; 48
    l6. 15/08/12; 3785 ; 2 ; 60
    l7. 16/08/12; 3785 ; 1; 37
    l8. 16/08/12; 3785 ; 2; 78
    l9. 16/08/12; 3785 ; 3; 19
    l10. 16/08/12; 3785 ; 4; 45
    l11. 16/08/12; 3785 ; 5 ; 159
    On a bien trois blocs, donc le tableau de résultat produit par l'exemple de code que je t'ai donné produira:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 => 80
    2 => 60
    3 => 159

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ce code ne peut pas fonctionner car il manque une ligne avec un index 1 qui empêche la dernière valeur d'être lue. Utilise l'exemple que je t'ai passé, ça devrait fonctionner comme tu le souhaite.

  8. #8
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Étrange, les lignes sont pourtant contigües... Qu'a cela ne tienne, on va faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $handle = fopen('mon_fichier.txt', 'r');
    $res = array();
    $current_block = 0;
    while ($line = fgets($handle)) {
      $row = explode(';', $line);
      if (isset($row[2]) && isset($row[3])) {
        if ($row[2] == 1) $current_block ++; // bloc suivant
        $res[$current_block] = $row[3];
      }
    }
    var_dump($res);
    Et là on devrait être tranquille.

    -- EDIT

    Dans mon exemple précédent (celui qui à des erreurs) j'avais oublié de spécifier le délimiteur CSV, la syntaxe correcte est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $handle = fopen('mon_fichier.txt', 'r');
    $res = array();
    $current_block = 0;
    while ($row = fgetcsv($handle, ';')) {
      if (isset($row[2]) && isset($row[3])) {
        if ($row[2] == 1) $current_block ++; // bloc suivant
        $res[$current_block] = $row[3];
      }
    }
    var_dump($res);
    A voir: http://php.net/manual/en/function.fgetcsv.php

  9. #9
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    il m'affiche maintenant sa :

    array(3) { [1]=> string(5) " 80 " [2]=> string(5) " 60 " [3]=> string(4) " 159" }

    pourtant il n'est pas demandé de retourner le array() ?

    Il faudrait qu'il m'affiche juste la valeur : 80 60 159
    Tu aurais pu y arriver non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo implode(' ', $res);

  10. #10
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    La dernière donnée en rouge est le dernier élément du tableau de résultat, pour l'afficher il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo array_pop($res);
    // ou
    echo end($res);

  11. #11
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Mais au juste, on vient de faire tout un imbroglio pour afficher une donnée de la dernière ligne du fichier exact ?

    Vu que c'est ça, pourquoi ne pas utiliser directement la dernière ligne en itérant le fichier par la fin ?? On peut utiliser ça: http://tekkie.flashbit.net/php/tail-...onality-in-php

    Ou faire ça salement de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $data = file("mon_fichier.txt");
    $row = str_getcsv($data[count($data)-1], ';');
    echo $row[3];

  12. #12
    Expert confirmé

    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
    Par défaut
    pour utiliser moins de mémoire je ferais plus comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $data = fopen('test.csv', 'rb');
     
    while($buffer = fgetcsv($data, 0, ';'))
    {
        $row = $buffer;
    }
     
    fclose($data);
     
    echo $row[3];

  13. #13
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    On reviens à ma solution précédente

Discussions similaires

  1. Probleme de lecture d'un fichier avec caractères speciaux
    Par bygui dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/06/2006, 09h35
  2. Upload de fichier avec variable passée en paramètre
    Par reservoirdev dans le forum ASP
    Réponses: 2
    Dernier message: 22/04/2006, 16h06
  3. Delphi: Lecture d'un fichier avec un tableau dynamique
    Par grégoire2 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2006, 18h50
  4. Problème lors de la lecture d'un fichier avec Input...
    Par Kronoob dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 18/11/2005, 18h55
  5. Réponses: 20
    Dernier message: 25/09/2005, 15h07

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