Parser un fichier texte dynamique en PHP

[Résolu/Fermé]
Signaler
Messages postés
5
Date d'inscription
mardi 26 août 2014
Statut
Membre
Dernière intervention
17 octobre 2014
-
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
-
Bonjour tous le monde,

Voilà mon (petit) problème...:

Je voudrais extraire des données depuis un fichier texte qui se trouve sur un site distant : http://www.swpc.noaa.gov/ftpdir/latest/daypre.txt

Seulement ce fichier est mis à jour tous les jours, la mise en page ne change pas mais les données, elles, changent.

Ce qui m'intéresse ici est d'intégrer sur ma page web la première valeur après "Class_M".
Je privilégie l'intégration en PHP et non en javascript...

J'ai déjà regarder les fonctions fget et regex mais (je n'ai peut-être pas compris) je n'y arrive pas...

Avec fget :
Je n'arrive pas à lui dire qu'il faut qu'il aille à la 57ème ligne et qu'il me prenne les 27 et 28ème caractères.

avec regex :
Les valeurs changeant tous les jours, je n'arrive pas à trouver la bonne expressions....

Quelqu'un pourrait-il m'aider ?

Je précise que je suis qu'un simple amateur en ce qui concerne mon niveau de PHP...

Merci d'avance :)

3 réponses

Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
203
Ce qu'il faut savoir pour les regexp c'est si la structure du fichier change ou pas.
Si c'est simplement les valeurs qui sont modifiées et qu'elles sont toujours sur une ligne, séparées par des espaces ou des tabulations ou autres caractères pas de soucis !
Voici un exemple d'expression régulière qui match avec ton fichier d'exemple :

Class_M[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)\r\n
Messages postés
5
Date d'inscription
mardi 26 août 2014
Statut
Membre
Dernière intervention
17 octobre 2014

Merci Zep3k!GnO de ta réponse rapide :)

Merci pour le renseignement, avec ce que tu me dit, ça me rassure.

J'ai essayé ton expression régulière mais j'ai une erreur de type Delimiter must not be alphanumeric or backslash...

je me suis peut-être tromper dans l'écriture :

<?php
if (preg_match("Class_M[^0-9]+([0-9]+)\r\n", "http://www.swpc.noaa.gov/ftpdir/latest/daypre.txt"))
{
echo 'Le mot que vous cherchez se trouve dans la chaîne';
}
else
{
echo 'Le mot que vous cherchez ne se trouve pas dans la chaîne';
}
?>


Par la suite j'aimerais intégrer le résultat du match dans une variable $toto.
A quel niveau du code ci-dessus je dois lui dire "maintenant que tu as trouvé ma valeur, met la dans la variable toto" ?

Merci beaucoup ! :)
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
203
Oui, tu as un problème d'écriture, si tu regardes la doc de preg_match(https://www.php.net/manual/fr/function.preg-match.php tu vois que le pattern doit être délimité. De plus tu n'as pas suivi la regexp que je t'avais envoyé. Je viens de tester et modifier rapidement ton script pour que tu vois ce qu'il faut faire :

<?php
$content = file_get_contents("http://www.swpc.noaa.gov/ftpdir/latest/daypre.txt"); //récupération du contenu du fichier.

if (preg_match("/Class_M[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)/", $content, $matches))
{
echo 'Le mot que vous cherchez se trouve dans la chaîne';
echo '<br/>Valeur 1 : '.$matches[1];
echo '<br/>Valeur 2 : '.$matches[2];
echo '<br/>Valeur 3 : '.$matches[3];
}
else
{
echo 'Le mot que vous cherchez ne se trouve pas dans la chaîne';
}
?>
Messages postés
5
Date d'inscription
mardi 26 août 2014
Statut
Membre
Dernière intervention
17 octobre 2014

Bonjour bonjour !

Alors je viens de tester le code, et bien... C'est PARFAIT :)

Merci beaucoup, en effet, je m'étais bien tromper dans la syntaxe :-/
On va mettre ça dans la fatigue, à force d'avoir le nez dedans on passe à coté de pas mal de choses...

Merci beaucoup Zep3k!GnO !

Bonne journée à toi :)
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
203
Pas de soucis, bonne journée !