[ PHP ] Regex ? Ou autre(s) ? [Résolu/Fermé]

Signaler
-
Templier Nocturne
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
-
Bonjour,
Je suis programmeur, et cette fois ci, je code en PHP. Mais mon problème est là :
je suis confronté à un challenge donné par un de mes collègues, et je dois me connecter à une page en local, pour récupérer les réponses d'une équation sur la page, je m'explique :
La page est sous cette forme ( très courte ) :
"Salut, écrit dans un fichier txt la réponse de 23*97?(9) Bonne chance !"
Le calcule étant actualisé à chaque rechargement de page, mais reste sous la même forme.
Je sais TOTALEMENT comment mi prendre, et donc, ce n'est pas pour ça que je viens chercher de l'aide. Je viens, car je cherche à prendre par exemple 23 pour le stoker dans une variable, puis 97 dans une autre etc... Sachant que à chaque réactualisation de page, le calcule change. Je sais comment faire pour tout le reste, ne vous inquiétez pas ;) merci.

Cordialement, Alexis.
En espérant avoir tout dit :)

Edit : Oups, j'ai oublié un ² ( carré ) à 23, ce qui donne donc :
23²*97racine(9)


7 réponses

Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
seules les valeurs changent, ou le calcul aussi ?
Les valeurs, la structure de l'équation restera la même : x*xracine(x)
Excusez moi, la ? est le symbole racine carré qui n'est pas accepté ;)

Edit : Oups, j'ai oublié un ² ( carré ) à 23, ce qui donne donc :
23²*97racine(9)
Templier Nocturne
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
dans ce cas, tu peux isoler le calcul avec str_replace()

ensuite, tu remplace le * est le R² par un espace (toujours avec str_replace() )

enfin, tu explose la chaine avec explode() en prenant les espaces en delimiteur :)


tu te retrouve avec tes trois variables :)
Merci à toi, je test tout ça demain, je tiens au courant, cependant, le topic reste ouvert ;)
Templier Nocturne
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
ok, bonne nuit et bon courage ;)
Merci, bon j'avoue, je sèche encore un peu, si quelque pouvais par exemple me faire l'exemple pour prendre le 23 par exemple ( sans le ² ! ) en sachant que 23 change à la réactualisation ;)
Cependant, je continue de mon côté.
Cordialement, Alexis.
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
$montexte = [fichier];
$montexte = str_replace($montexte, 'Salut, écrit dans un fichier txt la réponse de ', '');
$montexte = str_replace(' Bonne chance !', '', $montexte);
$montexte = str_replace('²*', ' ', $montexte);
$montexte = str_replace('R²', ' ', $montexte); (R² à premplacer par le symbole racine carrée)
$val = explode(' ', $montexte)

echo $val[0];
echo $val[2];
echo $val[3];


un truc de ce genre :)

comme ça, tu récupère uniquement tes trois valeurs (string), qu'il te faut traduire en (int) :)
Messages postés
258
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
22 juillet 2011
70
Ou sinon tu peut essayer avec des regex :
$subject="23²*97racine(9)"
$pattern="#([0-9])+[^0-9]+([0-9])+[^0-9]+([0-9])+#";
preg_match($pattern, $subject, $matches);

echo $matches[1];
echo $matches[2];
echo $matches[3]; 
Encore merci à vous deux, j'ai beau analyser la moindre ligne de code, mais moi et les regex, ça fait deux !! Je ne comprendrais donc jamais rien à celle-ci, challenge échoué ! ;) Je lui dirais, il a gagné, mais cependant, cela m'aurais quand même intéressé de savoir la réponse :p Si ça ne vous dérange pas bien sûr, sinon, je mettrais résolu :)
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
ben la solution, je te l'ai quasiment donnée :


// 1) on lit le fichier
$montexte = [fichier]; //je ne sais pas lire dans un fichier, flemme de chercher

// 2) on ne conserve que nos valeurs
$montexte = str_replace($montexte, 'Salut, écrit dans un fichier txt la réponse de ', '');
$montexte = str_replace(' Bonne chance !', '', $montexte);
$montexte = str_replace('²*', ' ', $montexte);
$montexte = str_replace('R²', ' ', $montexte); //(R² à premplacer par le symbole racine carrée)

//3) on met les valeurs dans des variables distinctes et on les traduit en nombres
$val = explode(' ', $montexte)

$val1 = (int) $val[0];
$val2 = (int) $val[1];
$val3 = (int) $val[2];

// 4) on fait le calcul
$resu = $val1 * $val1 * $val2 * sqrt($val3);

// 5) on met le résultat dans un fichier
[fichier] = $resu; // et non, je ne sais pas non plus ecrire dedans...
Oua, quasiment donnée, c'est vrai, mais comme dit précédemment, je ne suis vraiment pas doué avec les regex, c'est compliqué je trouve, bon, si tu veux, je vais mettre la suite, peut être ça servira pour certain personne ;) :

// On défini la variable pour valeur le fichier où l'on doit écrire
$fichier = fopen("fichier.txt", "a");
// On écrit dedans avec fwrite
fwrite($fichier, $resu);
// On referme le fichier avec fclose
fclose($fichier);


Je trouvais la suite beaucoup plus facile :p, donc si je ne me suis pas trompé, ça marche, la seul chose dont je ne suis pas sûr, c'est pour "a". Il me semble que lui ouvre le fichier en lecture et écriture, mais à voir, et "a+" si jamais le fichier n'est pas existant, ça le créera.
Voila, c'est un plaisir d'avoir parlé avec vous :) A la prochaine :) !
Templier Nocturne
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
ben j'ai utilisé aucune regex XD
Il me semblais que str_replace faisait partie des fonction des regex non ? Peut être je me trompe, mais j'ai toujours eu ça en tête, ou du moins, on les utilisent ( associe ) souvent avec les regex. Enfin bon, je me suis toujours mis ça en tête, sans jamais trop me pencher dessus :), la preuve.
Templier Nocturne
Messages postés
7791
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
917
ben str_replace() est super simple d'utilisation, et est parfois vraiment pratique quand on ne sait pas utiliser les regex (nous somme deux sur ce topic =D)