#1 Le 18/07/2011, à 11:31
- Remstux
script bash manipulation données METAR [Résolu]
Bonjour à tous,
Je fais en ce moment une mise à jour de ma page internet, dans lequel j'intègre des donnes en temps réel provenant de ma station météo. Je souhaite en plus intégrer des données provenant de la source METAR de ma ville afin que le visiteur puisse comparer mes données à celles "officielles" METAR. Pour jeter un œil : http://remstux.dyndns.org/meteo
Je débute en PHP et j'essaye donc d'adapter mes besoins à ce que je connais déjà.
J'importe les données METAR et je les décode :
metar -d LFLC > /home/moi/metar/lflc.txt
j'obtiens ce fichier texte :
LFLC 180700Z 22007KT 190V250 9999 FEW033 SCT050 BKN100 14/09 Q1010 TEMPO -SHRA
Station : LFLC
Day : 18
Time : 07:00 UTC
Wind direction: 220 (SW)
Wind speed : 7 KT
Wind gust : 7 KT
Visibility : 9999 M
Temperature : 14 C
Dewpoint : 9 C
Pressure : 1010 hPa
Clouds : FEW at 3300 ft
SCT at 5000 ft
BKN at 10000 ft
Phenomena : Light Showers Rain
Jusqu'ici tout va très bien, mais pour que je puisse exploiter facilement ces données dans une page php avec le code suivant
<?
$f = @fopen("txt.txt", "r");
while($f && !feof($f))
{
$value = fgets($f);
{
list($parameter,$parvalue)=explode(" ", $value);
$ws["$parameter"]=trim($parvalue);
}
}
@fclose($f);
?>
ce qui permet d'intégrer facilement les valeurs dans ma page web grâce à <?=$ws["parameter"]?> Ceci fonctionne très bien avec un fichier texte comme :
temp 10
wind 15
drewpoint 12
...
Ce sont donc des données paramètre valeur séparés par un espace.
Je voudrais obtenir un fichier texte exploitable par mon code php et éventuellement avoir un rendu texte comme ceci ou alors ces même données séparées uniquement par ":"
Station LFLC
Day 18
Time 07:00 UTC
Wind direction 220 (SW)
Wind speed 7 KT
Wind gust 7 KT
Visibility 9999 M
Temperature 14 C
Dewpoint 9 C
Pressure 1010 hPa
Clouds FEW at 3300 ft
SCT at 5000 ft
BKN at 10000 ft
Phenomena Light Showers Rain
Merci pour votre précieuse aide, je galère et un coup de pouce me ferait gagner du temps
Dernière modification par Remstux (Le 18/07/2011, à 20:32)
Hors ligne
#2 Le 18/07/2011, à 11:57
- Postmortem
Re : script bash manipulation données METAR [Résolu]
Salut,
Avec sed :
sed -i'.sav' 's/[[:blank:]]*: / /' /home/moi/metar/lflc.txt
Dernière modification par Postmortem (Le 18/07/2011, à 11:58)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 18/07/2011, à 13:22
- Remstux
Re : script bash manipulation données METAR [Résolu]
Salut Postmortem,
la petite formule avec sed marche à merveille, merci beaucoup.
Je vais abuser en voulant aller plus loin avec le résultat sed, j'aimerais que
LFLC 180700Z 22007KT 190V250 9999 FEW033 SCT050 BKN100 14/09 Q1010 TEMPO -SHRA // pas de changement
Station LFLC // pas de changement
Day 18 // pas de changement
Time 07:00 UTC // pas de changement
Wind direction 220 (SW) // devient: Winddirection
Wind speed 7 KT // devient: Windspeed 7KT
Wind gust 7 KT // devient: Windgust 7KT
Visibility 9999 M // pas de changement
Temperature 14 C // pas de changement
Dewpoint 9 C // pas de changement
Pressure 1010 hPa // pas de changement
Clouds FEW at 3300 ft // devient: CloudsFEWat 3300 ft
SCT at 5000 ft // devient: CloudsSCTat 5000 ft en début de ligne comme pour CloudsFEWat
BKN at 10000 ft // devient: CloudsBKNat 10000 ft en début de ligne comme pour CloudsFEWat
Phenomena Light Showers Rain // devient: Phenomena LightShowersRain (la valeur LightShowersRain peut être en fonction de la météo "Rain" ou "Light Rain")
Par exemple : actuellement <?=$ws["Phenomena"]?> m'affiche "Light" je voudrais qu'il m'affiche "LightShowersRain" (ou "Rain" ou "LightRain" ou "TinyLightShowersRain" en des données METAR)
J'espère que j'ai été clair dans ma demande, c'est pas toujours évident d'expliquer et que je n'abuse pas de votre sympathie.
Dernière modification par Remstux (Le 18/07/2011, à 19:55)
Hors ligne
#4 Le 18/07/2011, à 18:20
- AnsuzPeorth
Re : script bash manipulation données METAR [Résolu]
Bjr,
Avec sed ca doit être possible (je n'y suis pas arrivé, mais bon, je suis pas une référence ), awk serait plus approprié pour ce genre de traitements.
Mais pourquoi pas un petit script bash, ce n'est pas un fichier de 10 000 lignes, donc pas besoin non plus d'un truc hyper puissant !
#/bin/bash
while read line
do
line=${line/: / }
[[ "$line" =~ 'Clouds' ]] && line=${line/* FEW at/CloudsFEWat}
[[ "$line" =~ 'SCT at' ]] && line=${line/SCT at/CloudsSCTat}
[[ "$line" =~ 'BKN at' ]] && line=${line/BKN at/CloudsBKNat}
[[ "$line" =~ 'Phenomena' ]] && {
line=${line/Phenomena / }
line="Phenomena ${line// /}"
}
echo $line
done < '/home/fichier_in' > /home/fichier_out
exit
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#5 Le 18/07/2011, à 18:58
- Remstux
Re : script bash manipulation données METAR [Résolu]
salut AnsuzPeorth,
Je viens de tester le bash que tu m'as proposé et j'ai un retour :
$ sh script.sh
script.sh: 14: Bad substitution
$
Je ne comprends pas l'erreur
Dernière modification par Remstux (Le 18/07/2011, à 18:59)
Hors ligne
#6 Le 18/07/2011, à 19:33
- AnsuzPeorth
Re : script bash manipulation données METAR [Résolu]
ben tu l'execute en sh, c'est normal l'erreur, c'est du bash
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#7 Le 18/07/2011, à 19:59
- Remstux
Re : script bash manipulation données METAR [Résolu]
heu... j'me cache là... AnsuzPeorth (pas taper)
J'ai exécuté des sh pour des tests cet après-midi... j'étais sur une bonne lancée on dira
Ca marche parfaitement, par contre j'aimerais que Wind direction, Wind speed, Wind gust deviennent "Winddirection", "Windspeed", "Windgust".
J'ai essayé de m'inspirer de ton bash mais je crois que je suis un peu fatigué du neurone ce soir, peux-tu m'aider ?
Dernière modification par Remstux (Le 18/07/2011, à 20:14)
Hors ligne
#8 Le 18/07/2011, à 20:31
- Remstux
Re : script bash manipulation données METAR [Résolu]
En expliquant à ma fille de 2 ans ce que j'étais entrain de faire j'ai eu une illumination (petite hein, je suis loin d'être un genie)
J'ai complété ton code bash comme ceci :
#/bin/bash
while read line
do
line=${line/: / }
[[ "$line" =~ 'direction' ]]&& line=${line/Wind direction/Winddirection}
[[ "$line" =~ 'speed' ]]&& line=${line/Wind speed/Windspeed}
[[ "$line" =~ 'gust' ]]&& line=${line/Wind gust/Windgust}
[[ "$line" =~ 'Clouds' ]] && line=${line/* FEW at/CloudsFEWat}
[[ "$line" =~ 'SCT at' ]] && line=${line/SCT at/CloudsSCTat}
[[ "$line" =~ 'BKN at' ]] && line=${line/BKN at/CloudsBKNat}
[[ "$line" =~ 'Phenomena' ]] && {
line=${line/Phenomena / }
line="Phenomena ${line// /}"
}
echo $line
done < '/home/rems/Bureau/nouveau/lflc.txt' > /home/rems/Bureau/nouveau/lflc1.txt
exit
Tout fonctionne comme je voulais, je n'ai plus qu'à intégrer ces données dans la page php
J'espère que cela fonctionnera même si un paramètre ne comporte aucune valeur comme çà arrive très souvent.
En tout cas, un grand merci à Postmortem & AnsuzPeorth pour votre rapidité dans les réponses et votre aide apportée
Salutations
Hors ligne