Problème d'adaptation de script. (Résolu mais voir fin) - PHP - Programmation
Marsh Posté le 12-08-2003 à 23:11:23
c'est pour ton taf?
si oui, tu rémunères combien pour ce travail qui -je le rapelle- mérite salaire?
Marsh Posté le 12-08-2003 à 23:15:18
SchnapsMann a écrit : c'est pour ton taf? |
c'est qu'un site bénévole www.defrag-france.net comme tu le vois, trône un PayPal pour les dons à droite qui sont inexistants, et je paie déjà l'hebergement entièrement à mes frais
c'est sûr que si je cherche je dois bien trouver mais j'ai quelques problèmes de temps là, exemple d'un travail à moi, censé être rénuméré :
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
Je demande pas qu'on me le fasse, je demande un peu d'aide, spa l'ANPE ce forum
A+
Marsh Posté le 14-08-2003 à 11:25:29
Marsh Posté le 14-08-2003 à 11:35:34
il faut que tu utilises les expressions régulières, et donc changer le début de ton code.
si ca peut déjà un peu t'aider
Marsh Posté le 14-08-2003 à 11:40:16
bin comme tu l'as si bien expliqué le probleme c'est que le nom de ton fichier a completement changer de structure et donc que les tests qu'effectuaient ton scripts doivent choucrouter maintenant.
En même temps à mon avis il te suffit de virer le control sur l'extension:
Code :
|
Et il devrait marchouiller, ce qui te laissera le temps de le peaufiner ensuite...
Marsh Posté le 14-08-2003 à 11:41:00
Urd-sama a écrit : il faut que tu utilises les expressions régulières, et donc changer le début de ton code. |
ok merci, je suis sur la fonction ereg() je regarde
Marsh Posté le 14-08-2003 à 12:48:32
karamilo a écrit : preferes preg, bcp plus rapide et plus puissant ! |
je regarde mais je comprend pas tout de l'exemple
Eclatement d'une chaîne de recherche
Code :
|
"/[\s,]+/" Je comprend pas ce que ça contient en fait, dans mon cas, puis je faire ca ? :
Code :
|
où il faut juste spécifier "[].()" ?
Marsh Posté le 14-08-2003 à 12:58:38
ou avec split ?
<?php
$record = "map[df.type]xx.xx.xxx(pseudo.pays).dm_68";
// Les délimiteurs peuvent être des tirets, points ou slash
list ($month, $day, $year) = split ('[.]()]', $record);
?>
ou explode ?
non on dirait que je ne peux pas car il ne permet pas d'utiliser plusieurs séparateurs
Marsh Posté le 14-08-2003 à 13:02:53
il faut échapper [, ) et . car ce sont des caracteres speciaux de la regex
il faut aussi délimiter ta regexp preg avec deux caracteres identiques genre #taregexp#specials
edit: \s est une classe de caractere et signifie tous les caracteres blancs ( tabulation, saut de ligne, espace ... )
Marsh Posté le 14-08-2003 à 13:31:16
Ca pourrait donner ça ?
Si je prend soin d'échappper [, ) et .
$record = "map[df.type]xx.xx.xxx(pseudo.pays).dm_68";
$keywords = preg_split ("/[\[\]\.\(\)]+/", $record);
Où il faut que je fasse plusieurs "module" [...] ?
Je ne comprend pas très bien la syntaxe "/[...]+/"
A quoi sert le + ici ?
Je n'ai pas compris : "il faut aussi délimiter ta regexp preg avec deux caracteres identiques genre #taregexp#specials ".
Merci beaucoup pour ton aide
Marsh Posté le 14-08-2003 à 13:51:54
pas de probleme
dans une regex de type preg, il y a deux parties, l'expression et les options. La 1ere est delimitée au début et à la fin par un même caracteur ( qui doit pas etre alphanum ou antislash ).
si le delimiteur est utilisee ds l'expression, il doit etre echappe ( antislash ).
ca donne :
#expression#options
/expression/options
....
Les options :
i - recherche insensible à la casse.
m - recherche mutlilignes si l'expression est amenée à travailler sur des chaînes comportant des \n.
F - dans preg_replace permet d'appeler une fonction PHP pour fournir le caractère de remplacement (PHP 4.0.4).
A - "ancre" le masque, le motif recherché doit correspondre du début à la fin à l'expression régulière.
S - permet d'optimiser l'expression régulière si elle est appelée plusieurs fois, par exemple lors d?un traitement récursif ou en boucle.
s - le méta caractère point (.) prend toutes les valeurs, y compris le saut de ligne.
U - Limite la gourmandise de toute l?expression rationelle.
Ce qui est entre crochets [] est une classe de caractere et ce qui est entre paranthèses () est un sous motif, utile par exemple pour les references arrieres.
ta regex est pas mal, reste a tester
[...]+ veut dire qu'il faut un ou plus caractères qu'il y a entre []
par ex : [a1]+ = au moins un "a" ou un "1"
au contraire, * a la place de + => 0 ou plus de caracteres
et ? => 0 ou un seul caractere
tu peux definir le nombre precis avec {nbdebut,nbfin} qui represente l'intervalle possible :
a{2,4} => il faut entre 2 et 4 "a"
Marsh Posté le 14-08-2003 à 13:57:01
Ca a l'air de marcher karamilo ! Merci beaucoup !
<?php
$record = "map[df.type]xx.xx.xxx(pseudo.pays).dm_68";
$keywords = preg_split ("/[\[\]\.\(\)]+/", $record);
print_r($keywords);
?>
Array ( [0] => map [1] => df [2] => type [3] => xx [4] => xx [5] => xxx [6] => pseudo [7] => pays [8] => dm_68 )
Marsh Posté le 14-08-2003 à 14:26:05
karamilo a écrit : impec |
puis-je te demander un dernier service s'il te plait, le script répond presque à mes attentes, j'ai fais ceci qui me comble :
$record = "flow[df.cpm]00.16.584(-MdC-AhfeeL.Reunion).dm_68";
$keywords = preg_split ("/[\[\]\.\(\)]+/", $record);
$temps = "$keywords[3].$keywords[4].$keywords[5]";
// print_r($keywords);
//echo '<br>';
// echo '<br>';
echo "Le script traite le record suivant : $record.";
echo '<br>';
echo "La map choisie est $keywords[0].";
Seul soucis, les joueurs ne doivent pas avoir un pseudo contenant . [] et () ce qui risque de poser soucis, penses tu qu'il y aurait un moyen de palier ce petit défaut ?
Merci d'avance.
Marsh Posté le 14-08-2003 à 16:13:58
me revoila
le mieux ici est carrément de faire un preg_replace, sinon, ca serait "dangereux" de spliter le pseudo lui meme avec des [ ] ...
d'ou :
Code :
|
ca cherche le motif type puis mets le contenu changeant sous forme : var1 var2 var3
puis un simple explode des espaces et tu retrouves $map[0] == var1 ...
voila le resultat :
http://213.245.121.150/~karamilo/ti.php
les chiffres a la fin, c'est le tps d'execution pour voir si c'est potable ou pas. Ici, on a du 0.2 ms a peu pres, ce qui est impec
ps: j'avais vu ton programme pour les lans et ton site, bravo
Marsh Posté le 14-08-2003 à 17:49:58
J'ai un petit problème, même en recopiant ton code je n'obtient rien dans l'echo.
Code :
|
Merci pour le script et le site Dommage que ça ce soit mal terminé .
Marsh Posté le 14-08-2003 à 17:55:05
bizarre ca, regarde le lien du dessus, j'ai c/c et uploade la page.
tu as essayé sur une page de test?
Marsh Posté le 14-08-2003 à 18:10:21
C'est de ma faute désolé, ça a l'air de marcher, j'avais eu un décalage à cause du df qui n'est plus considéré comme une variable, il me faudrait par contre l'extension comme une variable $8, j essai de comprendre la syntaxe
Marsh Posté le 14-08-2003 à 18:35:19
ok tout est bon, encore merci !
Marsh Posté le 15-08-2003 à 16:16:28
de retour, j'ai un petit soucis pas trop grave, un joueur utilisait le pseudo Mdc.Scam, le point induit en erreur le script avec ce masque :
"#^(.*?)\[df\.(.*?)\]([0-9]{2})\.([0-9]{2})\.([0-9]{3})\((.*?)\.(.*?)\)\.(.*?)#"
Dans ton exemple tu n'avais pas mis de point, c'est peut être pour ça que tu n'as pas vu que ça posait problème.
Marsh Posté le 15-08-2003 à 16:18:10
si on vire le . de la paranthèse du pays ça marche ? (?*) c'est bon ?
edit : non ça marche pas
Marsh Posté le 18-08-2003 à 10:17:35
Marsh Posté le 18-08-2003 à 10:50:33
Master_Jul a écrit : J'ai un petit problème, même en recopiant ton code je n'obtient rien dans l'echo.
|
juste
Marsh Posté le 18-08-2003 à 11:37:45
karamilo a écrit : |
hello, tu peux me confirmer que mon problème de "." n'est pas résolvable ?
Marsh Posté le 18-08-2003 à 11:55:36
si, regarde le code juste au dessus, c'est modifié
avec le ? a la fin, ca va chercher au plus court possible. Au contraire, sans ?, le plus long possible.
ca sert aussi lors d'imbrications par exemple.
Marsh Posté le 18-08-2003 à 13:07:19
karamilo a écrit : si, regarde le code juste au dessus, c'est modifié |
merci mais où as tu appris tout ça ?
Marsh Posté le 18-08-2003 à 13:11:38
karamilo a écrit : sur le web |
moi aussi mais je n'ai pas poussé à ce point, peut être que si j'avais recherché un peu enfin c'est ce que j'ai fait mais j'avais vraiment du mal avec ces pattern, encore merci
Marsh Posté le 12-08-2003 à 23:09:48
Bonjour, je suis confronté à un problème embêtant et assez urgent, un ami a réalisé un script qui permet d uploader des fichier sur un site tout en remplissant une base de donnée, le script ci dessous, permet de gérer des fichiers de la forme :
classique : map_temps_pseudo_pays.zip
carte particulière CPM : map_cpm_temps_pseudo_pays.zip
temps supérieure à 1 minute : map_1minXX.XXX_pseudo_pays.zip
Tout marchait pour le mieux jusqu'à ce qu'une nouvelle version du jeu sorte et chamboulle la syntaxe qui devient :
map[df.type]xx.xx.xxx(pseudo.pays).dm_68
Ca perturbe encore plus le script d'origine qui reconnait les cartes de type CPM à leur nom qui est tout simplement xxx_cpm.
Je ne m'y connais pas trop en explode et compagnie, pourriez vous m'aiguiller svp ? L'enjeu est important des centaines de démos doivent être envoyées chaque jour et nous sommes bloqués car mon ami n'est pas en mesure de nous aider.
Message édité par Master_Jul le 18-08-2003 à 10:18:07
---------------
En français, on écrit "connexion", pas "connection".