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 :

Extraction de données dans une chaine variable


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : en recherche d'emploi

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Extraction de données dans une chaine variable
    Bonjour,

    Dans le cadre du développement de mon site web je souhaiterais intégrer une fonction de "rapport d'observation de terrain en direct".
    Celle-ci s’appuie sur un fichier récupérer sur un serveur distant via une fonction PHP.

    Le fichier en question contient une seul ligne sous cette forme symbolique:
    METAR CCCC YYGGggZ AUTO ddffGfmfmKT VVVVDv w'w' NsNsNsHsHsHs or CLR TT/T'dT'd PHPHPHPH=

    pour exemple, un message réel:
    METAR LFPO 292000Z 30015G25KT 7000 -SN BKN008 OVC040 M05/M08 1015 NOSIG=

    (pour un peu plus d'aide: http://zebulon1er.free.fr/codes.htm (ce n'est ni mon site ni une pub )

    voila mon problème:

    je souhaiterais extraire chaque partie du code en découpant la chaine à l'aide de la fonction "explode" puis traiter le résultat obtenue comme un tableau avec un "FOR" en identifiant chaques sous code par une expression rationnelle.

    seulement dans mon script les expressions rationnelles ne marchent pas vraiment (c'est la première fois que je les utilises ) du coup je n'arrive plus du tout à avancer.

    La chaine étant de longueur variable au grès des paramètres météorologiques plus ou moins nombreux (précipitations ou non, plus ou moins de nuages, remarques ou évolution ...) je ne vois que cette façon de traiter celle-ci:

    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
    <?
    //récupération du fichier
    $metar = file_get_contents('ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/LFMT.TXT');
    echo $metar;
    echo "<br/><br/>";
     
    // éclatement de la chaine
    $run = explode(" ", $metar);
    $tail = count($run);
    //expressions rationnelles
    $P = "/Q\d{4}/"; // expression rationnelle pression ok
    $D = "/^(19|20)\d\d[-/.]([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])$/"; //date marche pas
    $V = "/^(\d{3})V(\d{3})$/"; //vitesse de vent marche pas
     
    //boucle de traitement du tableau
    for($i = 0; $i<$tail; $i++) 
            {
     
    			if (preg_match($D,$run[$i], $D1)) print_r ($D1[0]); //date
    			if (preg_match($V,$run[$i], $V1)) print_r ($V[0]); //vitesse de vent
    			if (preg_match($P,$run[$i], $out)) print_r (substr($out[0], 1)); //pression OK
    			if ($run[$i] == "CAVOK") print_r ("visibilité superieur à 10Km");
            }
    	?>
    Je vous remercie pour votre aide je suis vraiment perdu.

    Stormfever

  2. #2
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    Salut !

    En essayant d'exécuter ton code, j'ai eu un warning sur la regex des dates, qui me disait qu'il avait un soucis avec le point...
    J'ai remplacé les caractères de début et de fin, des slash, par des dièses. C'est toujours plus simple de prendre des caractères qui ne sont pas utilisés dans ton expression... Et toujours bien régler le php.ini en dev, pour afficher un maximum de warning (et utiliser xdebug aussi, ça peut être bien).

    Cela dit, avec tes deux exemples de chaine, rien ne "match". Normal, pas normal ? Aurais-tu un exemple de chaine, quitte à la créer toi-même, qui contient une date, une vitesse de vent (et une pression, même si tu nous dis que ça marche) ?

    Peux-tu aussi expliquer un peu ton expression rationnelle de date ?
    Celle du vent est assez simple, la comprends-tu comme moi : "commence par 3 chiffres, puis 'V', puis 3 chiffres, et c'est la fin de la chaine". C'était bien ce que tu voulais faire ?

  3. #3
    Candidat au Club
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : en recherche d'emploi

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour climoo, merci pour ton intervention.

    Un exemple de message metar avec juste id de l'aéroport, jour, heure, minute, vent et pression:
    LFBO 172330Z 22004KT Q1020
    (id ae jjhhmm 11111KT Q1111)

    Je m’excuse pour ma réponse tardive j'ai très peu de temps en ce moment à cause de divers projet en parallèle de celui-ci mais je vais me relancer à fond dans celui-là.

    Pour le vent dans l'idéal il y aurais 3 chiffre pour la direction, 2 (voir 3) chiffres pour la vitesse puis G puis 2(voir 3) chiffres pour les rafales puis KT (en gros 111 11[1] G 11[1] KT)
    Mais il est possible d'avoir seulement 3 chiffres direction et 2 chiffres vitesse puis KT au minimum (111 11[1]KT).

    C'est extrêmement compliquer pour moi, je découvre les expressions régulière au fur et à mesure que je les utilises et je n'ai trouver malheureusement aucuns script sur lesquels m'appuyer pour ce petit programme
    Je vais regarder pour bien paramétrer mon php.ini aussi pour m'afficher un maximum d'erreurs!

    Merci beaucoup!

  4. #4
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    Je me suis penché un peu plus sur ton code, ta réponse, et également le lien que tu as filé.
    Ce bout de code pourra peut-être te mettre sur la voie...
    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
    <?php
    $vent_regex = "#([0-9]{3})([0-9]{2}[0-9]?)G([0-9]{2}[0-9]?)?KT#";
    $date_regex = "#([0-9]{2})([0-9]{2})([0-9]{2})Z#";
     
    $metar = "30015G25KT 292000Z";
     
    $expressions = explode(" ", $metar);
    foreach($expressions as $expression) {
        $results = NULL;
        $is_vent = preg_match($vent_regex, $expression, $results);
        if ($is_vent) {
            echo 'expression vent trouvé: ' . $results[0] . PHP_EOL;
            echo 'direction: ' . $results[1] . ' degrés' . PHP_EOL;
            echo 'vitesse moyenne ' . $results[2] . ' noeuds ' . PHP_EOL;
    	if (isset($results[3])) {
    	    echo 'rafales ' . $results[3] . ' noeuds' . PHP_EOL;
            }
        }
        else {
            $is_date = preg_match($date_regex, $expression, $results);
            if ($is_date) {
                echo 'expression date trouvée: ' . $results[0] . PHP_EOL;
                echo 'jour ' . $results[1] . PHP_EOL;
                echo 'heures ' . $results[2] . PHP_EOL;
                echo 'minutes ' . $results[3] . PHP_EOL;
            }
        }
    }

Discussions similaires

  1. Extraction de données dans une variable
    Par eudes dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/01/2010, 21h16
  2. regex / extraction de données dans une chaine
    Par fred6609 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/01/2009, 08h34
  3. extraction de données dans une chaine
    Par yag00 dans le forum Langage
    Réponses: 2
    Dernier message: 08/08/2008, 14h03
  4. extraction des données dans une table Access
    Par moabomotal dans le forum Access
    Réponses: 2
    Dernier message: 26/05/2006, 11h17
  5. Compter les occurences d'un car dans une chaine/variable
    Par sherlockfr dans le forum Windows
    Réponses: 2
    Dernier message: 10/11/2005, 07h48

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