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 :

PHP et Macro sur fichier Texte


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut PHP et Macro sur fichier Texte
    Bonjour à tous.

    Voilà, il faudrait que je récupère un fichier et que je le retravaille avec Excell pour récupérer les dates et les heures.

    Le truc c'est que je connais pas très bien le VB et donc je voudrais savoir si cela serais possible de faire l'équivalent avec PHP.

    Donc en gros, j'ai un fichier texte de plusieurs milliers de lignes et je voudrais y récupérer toutes les dates et heures associés pour ensuite le traiter dans Excel de manière à faire un graph.

    Est-ce possible ? Merci et bonne journée.

  2. #2
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    pour lire chaque ligne d'un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $handle = @fopen("/tmp/inputfile.txt", "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            echo $buffer;
        }
        fclose($handle);
    }
    ?>
    pour récupérer la date et les heures tu vas devoir utiliser les expressions régulières sauf si ton fichier est un xml :
    http://g-rossolini.developpez.com/tu...ns-regulieres/

    Pour écrire les données et faire un graph dans un fichier excel, tu dois installer
    une extension :
    http://php.developpez.com/cours/?page=bibliotheques#xls

    bon courage !

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    A quoi ressemble une ligne de ton fichier ?

  4. #4
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Bonjour,

    A quoi ressemble une ligne de ton fichier ?
    Exemple :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    ######################################################################### 
    15/12/2008 
    19:07 
    lmutil - Copyright (c) 1989-2005 Macrovision Europe Ltd. and/or Macrovision Corporation. All Rights Reserved.
    Flexible License Manager status on Mon 12/15/2008 19:07
     
    [Detecting lmgrd processes...]
    License server status: blablabla
        License file(s) on cuba: /home/root/licence/fichier_licence/msc/msc.txt:
     
          cuba: license server UP (MASTER) v10.8
       barbade: license server UP v10.8
         fidji: license server UP v10.8
     
    Vendor daemon status (on cuba):
     
           MSC: UP v10.8
     
    Users of campus:  (Total of 7191 licenses issued;  Total of 712 licenses in use)
     
      "CAMPUS" v2008.1231, vendor: MSC
      floating license
     
        blablabla
     
    NOTE: lmstat -i does not give information from the server,
          but only reads the license file.  For this reason, 
          lmstat -a is recommended instead.
     
    Feature			Version	  # licenses    Expires		Vendor
    _______			_______	  __________    _______		______
    CAMPUS                 	2008.1231	      7191	31-dec-2099	MSC
    ######################################################################### 
    15/12/2008 
    23:07 
    lmutil - Copyright (c) 1989-2005 Macrovision Europe Ltd. and/or Macrovision Corporation. All Rights Reserved.
    Flexible License Manager status on Mon 12/15/2008 23:07
     
    [Detecting lmgrd processes...]
    License server status: 27001@cuba,27001@barbade,27001@fidji
        License file(s) on cuba: /home/root/licence/fichier_licence/msc/msc.txt:
     
          cuba: license server UP (MASTER) v10.8
       barbade: license server UP v10.8
         fidji: license server UP v10.8
     
    Vendor daemon status (on cuba):
     
           MSC: UP v10.8
     
    Users of campus:  (Total of 7191 licenses issued;  Total of 0 licenses in use)
     
    NOTE: lmstat -i does not give information from the server,
          but only reads the license file.  For this reason, 
          lmstat -a is recommended instead.
     
    Feature			Version	  # licenses    Expires		Vendor
    _______			_______	  __________    _______		______
    CAMPUS                 	2008.1231	      7191	31-dec-2099	MSC
    Donc après les # je doit récupérer la date et l'heure...

    Dsl je t'ai envoyé un MP, me suis trompé...

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    A l'arrache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $handle = fopen("file.txt", "r");
    if ($handle) {
    while (!feof($handle)) {
      $buffer = fgets($handle, 4096);
      $buffer = trim($buffer);
      if($buffer == "#########################################################################") { $prepare_yourself = 1; }
    elseif ($prepare_yourself == 1) { echo 'date : ' . $buffer; $prepare_yourself = 2; }
    elseif ($prepare_yourself == 2) { echo 'heure: ' . $buffer . '</br>'; $prepare_yourself = 0; }
        }
    fclose($handle);
    }

  6. #6
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Merci.

    Par contre, question pour un champion... J'en fais quoi de ce code ? lol

    Parce que si je passe par une page HTML j'ai un page blanche.

    Merci.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu le mets dans ton repertoire de doc apache avec ton fichier (que j'ai appellé file.txt pour l'occassion) et en avant.
    Dans mon exemple ca affiche les dates à l'écran mais tu peux en faire autre chose.

  8. #8
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    sans oublier de démarrer ton serveur apache
    de nommer ton fichier index.php
    et d'accéder à celui-ci en tapant 127.0.0.1 dans ton navigateur.
    je pense que tu auras grandement besoin de ce tuto :
    http://sylvie-vauthier.developpez.co...?page=intro#LI

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    EDIT : Oups, il manquait une parenthèse, c'est ok, merci...
    Non en fait il y avait une parenthese de trop.

    Est-ce que je dois balancer tout ça dans une base de données ?
    Si ce traitement est un coup unique, oui garde le resultat dans quelque chose (base de donnée ou fichier)

  10. #10
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Si ce traitement est un coup unique, oui garde le resultat dans quelque chose (base de donnée ou fichier)
    Non, en fait, il y'aura d'autres fichiers...
    Donc je pense que le mieux c'est de faire une base en fonction de chaque fichier et si c'est possible quand on reprend un fichier déjà traiter, effacer la base pour la recréer...

    Par contre j'aurais deux questions :
    1/ Pourquoi tu passes par deux elseif ? Au lieu de tout mettre à le suite...
    2/ Quel est la fonction pour chercher du texte dans un fichier texte ?
    l'idée c'est que j'ai cette ligne :
    'Users of campus: (Total of 1306 licenses issued; Total of 990 licenses in use)'

    Donc faut que je récupère le 1306 et ensuite le 990. Bien sur c'est nombres changent constamment...

    Merci.

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi tu passes par deux elseif ? Au lieu de tout mettre à le suite...
    comment ca a la suite ?

    pour recuperer tes deux chiffres, une petite expression réguliere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    preg_match('`(?<issued>\d*) licenses issued; Total of (?<total>\d*) licenses in use\)`s', $chaine, $match);
    echo 'issued : ' . $match('issued');
    echo 'total: ' . $match('total');

  12. #12
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par sabotage Voir le message
    comment ca a la suite ?

    pour recuperer tes deux chiffres, une petite expression réguliere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    preg_match('`(?<issued>\d*) licenses issued; Total of (?<total>\d*) licenses in use\)`s', $chaine, $match);
    echo 'issued : ' . $match('issued');
    echo 'total: ' . $match('total');
    Beh tu aurais pu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elseif ($prepare_yourself == 1){
    		echo '<em>'.'Date : '.'</em>'.$buffer;
    		echo '<em>'.' - Heure : '.'</em>'.$buffer.'</br>';}
    J'ai essayé et ça fonctionne ... Enfin après y'a peut-être une subtilité que je n'est pas vu. J'essaye ca, merci.

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai essayé et ça fonctionne
    heu ca m'ettonerait.
    Ma demarche est la suivante :
    $prepare_yourself == 1 : on vient de lire la sequence de #, on se prepare donc a recevoir la date au prochain tour de boucle
    $prepare_yourself == 2 : on a lu la ligne suivant la sequence de #, le prochain tour de boucle ramene l'heure

  14. #14
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut Merci d'utiliser la fonction "Éditer"
    ...

    Citation Envoyé par sabotage Voir le message
    heu ca m'ettonerait.
    Ma demarche est la suivante :
    $prepare_yourself == 1 : on vient de lire la sequence de #, on se prepare donc a recevoir la date au prochain tour de boucle
    $prepare_yourself == 2 : on a lu la ligne suivant la sequence de #, le prochain tour de boucle ramene l'heure
    Ok, effectivement... J'arrive pas à retrouver comment j'ai fais mais il y'a sans doutes erreur de ma part.

    Par contre, concernant la ligne 'preg_match', est-ce que je la met bien dasn la boucle While ??? Parce que j'ai deux erreur, dont une (la première) sur cette ligne.

    Merci.

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Heu je ne l'avais pas tester comme ca, mais ca doit fonctionner dans la boucle, remplace bien $chaine par $buffer.

  16. #16
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Heu je ne l'avais pas tester comme ca, mais ca doit fonctionner dans la boucle, remplace bien $chaine par $buffer.
    ok, après changements, effectivement ca fonctionne... Enfin presque...
    J'ai une autre erreur (la 2° donc) sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ' Licence issued : '.$match('issued');
    Si je vire le ('issued'), ca fonctionne (ca affiche array par contre) et j'ai une erreur sur la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ' Total licence : '.$match('total');
    Voilà. Est-ce que tu pourrais m'expliquer un peu la ligne du preg_match ?
    Parce que j'aimerais bien y arriver tout seul et débugger aussi mais là je patoge complet. En tout cas merci pour tes réponses... Heureusement que tu es là

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    j'avais pas pris mes vitamines moi hier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ' Licence issued : '.$match['issued'];
    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
    <?php
    $handle = fopen("file.txt", "r");
    $prepare_yourself = 0;
    if ($handle) {
    	while (!feof($handle)) {
    		$buffer = fgets($handle, 4096);
    		$buffer = trim($buffer);
    		if($buffer == "#########################################################################") { $prepare_yourself = 1; }
    		elseif ($prepare_yourself == 1) { echo 'date : ' . $buffer; $prepare_yourself = 2; }
    		elseif ($prepare_yourself == 2) { echo ' heure: ' . $buffer . '</br>'; $prepare_yourself = 0; }
    		elseif (preg_match('`^Users of campus:  \(Total of (?<issued>\d*) licenses issued;  Total of (?<total>\d*) licenses in use\)$`s', $buffer, $match)) {
    			echo 'issued : ' . $match['issued'] .'<br/>';
    			echo 'total: ' . $match['total'] .'<br/>';
    		}
    	}
     
    	fclose($handle);
    }
    ?>
    Pour le preg_match :
    ^ = une chaine qui commence par
    \d = un chiffre
    \d* = plusieurs chiffres
    (\d*) = on capture plusieurs chiffres
    (?<issued>\d*) = on capture plusieurs chiffres et le resultat sera "issued"
    ^Users of campus: \(Total of (?<issued>\d*) licenses issued; = la chaine commence par "Users of campus: (Total of ", ensuite il y a mon truc a capturer, ensuite il y a "licenses issued"
    $ = fin de la chaine
    ` = caractère pour encadrer mon expression

  18. #18
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Super merci, je fais quelques essais...

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

Discussions similaires

  1. [VBA] Excel Récuperer Macro sur fichier corrompu
    Par Phenx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/01/2009, 13h13
  2. Réponses: 2
    Dernier message: 29/05/2006, 09h54
  3. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  4. Réponses: 11
    Dernier message: 17/05/2006, 10h48
  5. problème sur fichier texte
    Par vivelesgnous dans le forum Général Python
    Réponses: 6
    Dernier message: 26/04/2006, 20h08

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