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é
 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 ?  ![[:meganne] [:meganne]](https://forum-images.hardware.fr/images/perso/meganne.gif) 
 
 
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 ?
 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
 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".