Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 
  • Portail PHP
  •  » PHP - SQL
  •  » Extraire une partie d'un fichier txt et l'afficher avec du php(Résolu)

#1 13-01-2008 15:33:33

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Extraire une partie d'un fichier txt et l'afficher avec du php

Re bonjour,

j'ai beau essayé de comprendre la gestion en php des fichiers : lire, écrire etc.... je ne m'en sors pas.

Je vous explique mon petit soucis cette fois :

voici un lien : http://www.ogimet.com/ultimos_metars.ph … Enviar=Ver

A l'écran, ça donne quelque chose comme ça :

##########################################################
# Consulta realizada a 13/01/2008 19:33:11 UTC
##########################################################

###################################
# Ultimos METAR/SPECI de France antes de 13/01/2008 19:33:11 UTC
###################################
200801131900 METAR LFBA 131900Z AUTO 12009KT 9999NDV NSC 08/03 Q1010=
200801131900 METAR LFBC 131900Z AUTO 16008KT 9999NDV // NCD 09/04 Q1007=
200801131900 METAR LFBD 131900Z 14008KT CAVOK 08/04 Q1007 NOSIG=
200801131900 METAR LFBE 131900Z AUTO 14008KT 9999NDV NSC 08/03 Q1009=
200801131900 METAR LFBG 131900Z AUTO 16011KT 9999NDV // ///////// 08/03
                        Q1007=
200801131900 METAR LFBH 131900Z AUTO 16015KT 9999NDV NSC 09/05 Q1005=

etc....


Je voudrais en php récupérer l'intégralité de ce qui s'affiche à l'écran, le mettre dans un fichier .txt

puis, avec un autre php, lire mon fichier.txt, récupérer une ligne choisie (exemple : je veux la ligne où il y a LFBG) :

soit : 200801131900 METAR LFBG 131900Z AUTO 16011KT 9999NDV // ///////// 08/03
                        Q1007=

et afficher à l'écran cette ligne mais en n'écrivant que :

OBS METAR : LFBG
DU : 13/01/2008 à 1900 UTC
----------------------------------
METAR LFBG 131900Z AUTO 16011KT 9999NDV // ///////// 08/03 Q1007=



Est-ce que parmis tous les cracks en php, il y aurait une âme charitable qui pourrait se pencher sur mon problème et me fournir un code php car j'essaye de le faire mais j'ai pas assez de connaissances encore et comme j'essaye de comprendre l'utilisation des feuillers de style css, j'ai pas assez de temps pour faire ce truc en php.
Je me suis dis que peut être les pros du php pourraient me donner un coup de main, ça sert à ça aussi les forums ?

Cordialement,

Hors ligne

 

#2 14-01-2008 18:30:43

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Salut,

Code:

$lines = file('test.txt');
foreach ($lines as $line_num => $line) {
    if (stripos($line, 'LFBG')) {
        $year  = substr($line, 0, 4);
        $month = substr($line, 4, 2);
        $day   = substr($line, 6, 2);
        $hour  = substr($line, 8, 2);
        $min   = substr($line, 10, 2);
        
        echo 'OBS '.substr($line, 13, 5).' : '.substr($line, 19, 4).'<br />';
        echo 'DU : '.$day.'/'.$month.'/'.$year.' &agrave; '.$hour.':'.$min.' UTC<br />';
        echo '----------------------------------<br />'.$line.'<br /><br />';
    }
}

Comme tu peux le voir je n'ai pas utilisé plus de trois fonctions, dont substr qui permet de récuperer les morceaux de texte que l'on veux à chaque tours de la boucle foreach.
Le principe est simple :
1 : tu met le contenu de ton fichier dans un tableau (ligne 1)
2 : tu commence la bouche (ligne 2)
3 : si dans la ligne courante on trouve le texte 'LFBG' on récupère les portions de texte recherchées (ligne 3 et suivantes)
Et cela pour chaque lignes contenant le texte voulu.

Regarde ici pour plus d'infos sur substr : http://fr.php.net/manual/fr/function.substr.php

Hors ligne

 

#3 15-01-2008 06:33:07

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Bonjour à tous, Bonjour Shiva et merci pour ton aide précieuse.

Je comprends le fonctionnement de ton code : merci c'est super.
Mais j'ai quand même un retour en erreur avec écrit à l'écran :


Fatal error: Call to undefined function: stripos() in /home.2/meteophi7/www/lfbg.php on line 16

la fonction stripos ne semble pas connue pourtant j'ai vu qu'elle existe bien.

En revanche avec la fonction stristr, tout marche. Tu as une idée de pourquoi ça marche pas avec stripos ?

Par contre, je viens de me rendre d'un petit probleme.

Pour expliquer un METAR est une observation météo pour l'aéronautique.

Les LF?? correspondent aux identifiants d'aéroports.

Certaines infos sont écrites sur 2 lignes et pas juste la première. En fait, il faudrait que je récupère et affiche pour un LF?? donné, toute la ligne jusqu'au signe =.

Exemple : Pour LFQQ ( c'est l'aéroport de Lille en France )

200801151130 METAR LFQQ 151130Z 20027G41KT 9999 -RA BKN017 09/07 Q0992
                        TEMPO 20030G45KT=


j'aimerais afficher :

OBS METAR : LFQQ
DU : 15/01/2008 à 11:00 UTC
----------------------------------
METAR LFQQ 151130Z 20027G41KT 9999 -RA BKN017 09/07 Q0992 TEMPO 20030G45KT=


Est-ce que tu pourrais m'aider encore un peu pour le code car je suis pas assez doué en php. Je débute à peine et j'ai l'impression que ce que je voudrais faire est déjà trop compliqué !  lol

Merci en tout cas
A beintôt
j'espère





Merci en tout cas de ton aide, c'est super sympa!

Bonne journée à tous!

Dernière modification par microphilou (15-01-2008 06:50:42)

Hors ligne

 

#4 15-01-2008 19:42:30

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Pour ce qui est de la fonctio stripos non reconnue c'est simplement parce que tu n'utilise pas PHP5 mais 4
Ensuite, pour ton fichier, tu le récupère déjà formaté comme ça ?

Hors ligne

 

#5 16-01-2008 00:48:43

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Bonjour
ah ok pour la version de php 4 au lieu de 5, je n'y avais pas pensé.

Oui, je récupère le fichier au format que je t'ai montré :

exemple :

##########################################################
# Consulta realizada a 13/01/2008 19:33:11 UTC
##########################################################

###################################
# Ultimos METAR/SPECI de France antes de 13/01/2008 19:33:11 UTC
###################################
200801131900 METAR LFBA 131900Z AUTO 12009KT 9999NDV NSC 08/03 Q1010=
200801131900 METAR LFBC 131900Z AUTO 16008KT 9999NDV // NCD 09/04 Q1007=
200801131900 METAR LFBD 131900Z 14008KT CAVOK 08/04 Q1007 NOSIG=
200801131900 METAR LFBE 131900Z AUTO 14008KT 9999NDV NSC 08/03 Q1009=
200801131900 METAR LFBG 131900Z AUTO 16011KT 9999NDV // ///////// 08/03
                        Q1007=
200801131900 METAR LFBH 131900Z AUTO 16015KT 9999NDV NSC 09/05 Q1005=




Il faudrait que j'arrive à récupérer tout le message  depuis le mot METAR jusqu'au signe = même si celui-ci est sur la ligne du dessous.


Merci de m'aider comme tu fais, c'est sympa car j'imagine que je prends de ton temps.

Cordialement

Hors ligne

 

#6 16-01-2008 19:34:07

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

En fait il faut jouer avec le tableau $lines

Code:

$lines = file('test.txt');
foreach ($lines as $num => $line) {
    $line = trim($line);
    if ((strrchr($line, '=') == false) and (substr($line, 0, 1) != '#') and ($line)) {
        $line = $line.' '.$lines[$num + 1];
    }

    if (stristr($line, 'LFB')) {
        $year  = substr($line, 0, 4);
        $month = substr($line, 4, 2);
        $day   = substr($line, 6, 2);
        $hour  = substr($line, 8, 2);
        $min   = substr($line, 10, 2);
        
        echo 'OBS '.substr($line, 13, 5).' : '.substr($line, 19, 4).'<br />';
        echo 'DU : '.$day.'/'.$month.'/'.$year.' &agrave; '.$hour.':'.$min.' UTC<br />';
        echo '----------------------------------<br />'.$line.'<br /><br />';
    }
}

Donc, si lla ligne courante n'est pas le caractère = et qu'elle ne débute pas par une # et qu'elle n'est pas vide, ca veux dire que cette ligne n'est pas complète et qu'elle se trouve une ligne plus dans le tableau $lines, il suffit donc de récuperer la partie manquante avec $lines[$num + 1] et de reformer la ligne complète avec $line.' '.$lines[$num + 1];

Hors ligne

 

#7 17-01-2008 02:52:32

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Bonjour

alors là.... merci !!!!!!
je comprends le dernier code que tu m'as écrit mais un peu plus difficilement quand même au niveau du test de la fin de ligne avec =.
Je vois que j'ai encore pas mal de choses à apprendre surtout !!!

Si je peux, j'aurais quand une dernière question sur ce code :
Je me suis rendu compte que parfois, les données que je veux afficher pour un aéroport ne sont pas encore disponibles.

Par rapport à ton dernier code, est-ce que tu pourrais me dire comment faire afficher à l'écran  "Données absentes" quand le script php ne trouve pas un indicatif par exemple LFZZ?

Je te remercie encore vraiment beaucoup car j'y arriverai pas sans des gens comme vous sur ce forum.
Merci merci merci !!!!!!!

Bonne journée (ou soirée)
A+

Hors ligne

 

#8 17-01-2008 03:24:13

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

re

décidemment, je suis trop nul c'est pas possible...... :-(
j'ai voulu me servir du dernier code que tu as écris, adapté à un fichier légèrement différent.

<?

$lines = file('http://www.ogimet.com/ultimos_tafs.php?estado=France&fmt=txt&iord=yes&Enviar=Ver');
foreach ($lines as $num => $line) {
    $line = trim($line);
    if ((strrchr($line, '=') == false) and (substr($line, 0, 1) != '#') and ($line)) {
        $line = $line.' '.$lines[$num + 1];
    }

    if (stristr($line, 'LFRB')) {
        $year  = substr($line, 0, 4);
        $month = substr($line, 4, 2);
        $day   = substr($line, 6, 2);
        $hour  = substr($line, 8, 2);
        $min   = substr($line, 10, 2);
       
        echo 'OBS '.substr($line, 13, 3).' : '.substr($line, 17, 4).'<br />';
        echo 'DU : '.$day.'/'.$month.'/'.$year.' &agrave; '.$hour.':'.$min.' UTC<br />';
        echo '----------------------------------<br />'.$line.'<br /><br />';
    }
}

?>


A la place de METAR, ce sont en fait des TAF :
En résumé : un metar est une osbervation météo et un TAF une prévision.


La structure du fichier est la même. Je pensais donc pouvoir utiliser le code précédent pour ce nouveau fichier.
Je recherche un indicatif ( ici LFRB ) et lorsque je l'ai trouvé je récupère la ligne jusqu'au signe =.

Or, ça ne me récupère que les 2 premières lignes et si le message TAF de LFRB comporte 3, 4 ou 5 lignes, il ne les affiche pas. Il ne va pas jusqu'au signe égal.

Concrètement, j'ai par exemple dans le fichier brut :

200801170500 TAF LFRB 170500Z 170615 20015G25KT 6000 OVC006
                      TEMPO 0612 3000 DZRA BKN002
                      BECMG 1215 27016G26KT 9999 BKN025
                      PROB40 TEMPO 1215 SHRA=


et le code php ne m'affiche que :

OBS TAF : LFRB
DU : 17/01/2008 à 05:00 UTC
----------------------------------
200801170500 TAF LFRB 170500Z 170615 20015G25KT 6000 OVC006 TEMPO 0612 3000 DZRA BKN002


Il me manque :
BECMG 1215 27016G26KT 9999 BKN025
PROB40 TEMPO 1215 SHRA=


Je croyais que le code testait les lignes jusqu'à ce qu'il trouve le signe = ?


Je ne comprends plus rien !  lol
Argggggggggggg
Ca t'embêterait pas de m'aider encore un p'tit peu ?
Désolé de t'ennuyer, ça doit vous prendre du temps à tous de regarder tout ça :-(

Merci en tout cas bcp si tu trouves une solution

A+
Philippe

Hors ligne

 

#9 17-01-2008 17:20:54

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Petite modif concernant les infos etalées sur plusieurs lignes :

Code:

<?php
$lines = file('test.txt');
$cpt = 0;
/**
 * Creation d'un nouveau tableau avec les lignes reformatees
 */
foreach ($lines as $line) {
    $line = trim($line);
    if ((substr($line, 0, 1) != '#') and ($line)) {
        if (strrchr($line, '=') == false) {
            /** 
             * Lignes ne se terminant pas par le caractere =
             */
            $new_line .= $line;
        } else {
            $new_line .= $line;
            $cpt = 1;
        }
    }

    if ($cpt == 1) {
        /**
         * Ajout de la ligne dans le nouveau tableau
         */
        $array_line[] = $new_line;
        unset($new_line);
        $cpt = 0;
    }
}

/**  
 * Affichage des lignes
 */
foreach ($array_line as $line) {
    if (stristr($line, 'LFR')) {
        $year  = substr($line, 0, 4);
        $month = substr($line, 4, 2);
        $day   = substr($line, 6, 2);
        $hour  = substr($line, 8, 2);
        $min   = substr($line, 10, 2);
        
        echo 'OBS '.substr($line, 13, 5).' : '.substr($line, 19, 4).'<br />';
        echo 'DU : '.$day.'/'.$month.'/'.$year.' &agrave; '.$hour.':'.$min.' UTC<br />';
        echo '----------------------------------<br />'.$line.'<br /><br />';
    } else {
        echo '<p style="color: red;">Infos non dispo !<br />----------------------------------</p>';
    }
}
?>

Ce que j'ai fais, c'est simplement recréer un tableau avec les lignes reformatées.

Hors ligne

 

#10 18-01-2008 02:38:59

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Bonjour
encore merci beaucoup mais il y a un problème avec ce code, ça écrit plusieurs fois données non disponibles

Hors ligne

 

#11 18-01-2008 17:48:56

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Ca c'est normal, si le bout de texte recherché dans la ligne n'est pas trouvé, il affiche que les données ne sont pas disponibles.
Tu peux virer ou mettre en commentaire cete partie là si tu ne veux plus voir afficher ce message.

Code:

 else {
        echo '<p style="color: red;">Infos non dispo !<br />----------------------------------</p>';
    }

Hors ligne

 

#12 20-01-2008 15:08:07

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Bonjour Shiva et les autres et merci pour ton aide !
C'est impeccable !!!! ça marche super bien.

Du coup, j'étais parti sur l'idée de faire un fichier php pour chaque indicatif qui m'intéresse mais j'ai lu qqe part que je pouvais aussi faire appel à une variable au niveau du fichier php.


Voilà, j'ai donc mis tout ton code dans un fichier metar.php
Mais pour chaque observation d'un nouveau aeroport, je suis obligé de faire un fichier php différent uniquement pour indiquer dans le code l'indicatif METAR que je recherche.

<?php
......
foreach ($array_line as $line) {
    if (stristr($line, 'LFQQ')) {                          // ici l'indicatif dans le code php est LFQQ
        $year  = substr($line, 0, 4);
.....

?>

je voudrais remplacer LFQQ par une variable (exemple: id_metar) que je pourrais appeler directement depuis l'url php et qui donnerait un truc du style : http://www.monsite.com/metar.php?id_metar=LFQQ

Si j'ai bien compris ce que j'ai lu sur une doc, c'est comme ça qu'il faut écrire l'appel de la variable mais je ne sais pas l'écrire dans le code php

Comment faire dans le code php svp ?

Hors ligne

 

#13 20-01-2008 15:39:49

microphilou
Membre
Date d'inscription: 13-01-2008
Messages: 13

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

re
bon cette fois j'ai trouvé tout seul comme un grand :-)

si je ne me trompe pas, voilà ce que j'ai écris :


au niveau du code php , j'ai mis ma variable id_metar  :

    if (stristr($line, $id_metar)) {
.....


et je l'appelle depuis l'url en mettant tout simplement : http://www.monsite.com/metar.php?id_metar=lfqq

et ça marche !! (pour une fois que j'arrive tout seul à trouver :-)

Merci en tout cas à Shiva pour ton aide précieuse !!!

Hors ligne

 

#14 20-01-2008 18:39:21

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: Extraire une partie d'un fichier txt et l'afficher avec du php

Comme quoi le PHP c'est pas dur smilesmilesmile

Hors ligne