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
    Candidat au Club
    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
    Points : 4
    Points
    4
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éclairé

    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
    Points : 735
    Points
    735
    Par défaut
    Récupérer la 4ème valeur de la dernière ligne de chaque jour, c'est ça ?
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    Par défaut
    Mais comment fais-tu pour déterminer les lignes à lire ? quelle logique doit suivre ton algorithme ?

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    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 146
    Points : 9 386
    Points
    9 386
    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é)

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 é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
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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