[RESOLU] concatenation

concatenation [RESOLU] - PHP - Programmation

Marsh Posté le 04-07-2006 à 16:40:08    

bonjour, jai une chaine de caractére P1.jpg, je voudrai gardé que les chiffres pour incrémentez de 1 (P2.jpg, P3.jpg...) jai utilisez cette maniére substr('P1;jpg', 1, 1); mais le probléme est que si jai P10.jpg sa marchera pu. Merci d'avance
 
[EDIT]=merci guitou12


Message édité par mule_panda le 06-07-2006 à 16:32:48
Reply

Marsh Posté le 04-07-2006 à 16:40:08   

Reply

Marsh Posté le 04-07-2006 à 16:42:15    

tu exploses ta chaine au point, tu rajoutes ton numero et tu recolles.
sinon avec une expression reguliere

Reply

Marsh Posté le 04-07-2006 à 16:42:22    

for($i=0;$i<jusqu_ou_tu_veux_aller;++$i)
echo 'P'.$i.'.jpg';
 
?
 
[Edit: Oublié que c'etait du php]


Message édité par esox_ch le 04-07-2006 à 16:43:21

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2006 à 16:43:18    

Essaie avec explode
 
PS: on crémente pas on incrémente ;)

Reply

Marsh Posté le 04-07-2006 à 17:11:14    

avec ceci : strrchr(P1.jpg,'.'); on garde ce qu'il y a aprés le point comprix. Existe t il linverse?

Reply

Marsh Posté le 04-07-2006 à 17:15:38    

Code :
  1. preg_replace('/P(\d+).jpg/e', 'P'.($1+1).'jpg');

Reply

Marsh Posté le 04-07-2006 à 17:29:21    

autre solution (mais moins bien)
 
 

Code :
  1. $fileName= "photo.jpg";
  2. $i=2;
  3. $elements= explode(".", $fileName);
  4. echo $fileName." => ".elements[0].$i.elements[1];

Message cité 1 fois
Message édité par nemohp le 04-07-2006 à 17:30:26
Reply

Marsh Posté le 04-07-2006 à 17:31:17    

nemohp a écrit :

autre solution (mais moins bien)
 
 

Code :
  1. $fileName= "photo.jpg";
  2. $i=2;
  3. $elements= explode(".", $fileName);
  4. echo $fileName." => ".elements[0].$i.elements[1];



 
Ouah  :ouch:  Je pensais pas qu'on pouvait trouver aussi lourd  :ouch:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2006 à 17:32:01    

ou alor j'ai 1P.jpg, je souhaite enlevé le 5 derniére Lettre ?

Reply

Marsh Posté le 04-07-2006 à 17:32:32    

=> Lire la doc


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2006 à 17:32:32   

Reply

Marsh Posté le 04-07-2006 à 17:36:28    

esox_ch a écrit :

Ouah  :ouch:  Je pensais pas qu'on pouvait trouver aussi lourd  :ouch:


 
lol c'est sur mais il cherchait un truc du genre  :sweat:  
 
il découvre les manipulations de chaines avec PHP, faut lui laisser le temps  ;)  

Reply

Marsh Posté le 04-07-2006 à 17:36:48    

elle te plait pas ma solution ???
Tiens encore plus bourrin comme ça, ça marche tout le temps:

Code :
  1. preg_replace('/(\d+)/e', $1+1);

Reply

Marsh Posté le 04-07-2006 à 17:38:17    

Oula :D Les fanatique de perl debarquent :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2006 à 17:39:24    

du shell plutot

Reply

Marsh Posté le 04-07-2006 à 17:42:41    

Nan nan preg c'est pour "perl regular ..." donc c'est plutot esox_ch qu'a raison ... mais prout quand même :o
 
Mais honnêtement, autant les expressions régulières sont plus que souvent mal utilisées, autant là ça correspond parfaitement à son besoin.

Reply

Marsh Posté le 04-07-2006 à 18:42:10    

Et ma boucle hein? Elle est bien ma boucle!
*Ok je sors ...*
 
P.S: Repet pour l'ereg :D Faudra que j'apprenne cet été .. parceque la mon niveau est celui des tuto php (lim -> 0)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2006 à 18:46:36    

Ouai enfin, ya quand même quelques questions à se poser.
 
1) Est-ce que les noms des fichiers sont vérifiés comme étant forcément lettres+numero.jpg (en clair, faut pas qu'il y ait un autre mélange chiffre lettres avant le chiffre avant le '.')
 
2) Pourquoi ne pas définir un chiffre maximal, genre 9999 et donc on aurait : truc0001.jpg pour le premier.
Sacrément plus simple ensuite avec un substr($chaine, -8, 4) qui sera facile à traiter et bcp plus rapide qu'une expreg.

Reply

Marsh Posté le 04-07-2006 à 18:51:55    

Nous on propose des solutions avec ce qui nous est donné Monsieur :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-07-2006 à 09:36:19    

Hermes le Messager a écrit :

Ouai enfin, ya quand même quelques questions à se poser.
 
1) Est-ce que les noms des fichiers sont vérifiés comme étant forcément lettres+numero.jpg (en clair, faut pas qu'il y ait un autre mélange chiffre lettres avant le chiffre avant le '.')
 
2) Pourquoi ne pas définir un chiffre maximal, genre 9999 et donc on aurait : truc0001.jpg pour le premier.
Sacrément plus simple ensuite avec un substr($chaine, -8, 4) qui sera facile à traiter et bcp plus rapide qu'une expreg.


 
Bonne idée j'y avait passé mais lorsque que lon incremente 0001+1 il va marqué truc2.jpg, je vai testé les différente solution se matin Merci pour votre aide, je vous tindedrez informez.  :sarcastic:

Reply

Marsh Posté le 05-07-2006 à 09:40:11    

mule_panda a écrit :

Bonne idée j'y avait passé mais lorsque que lon incremente 0001+1 il va marqué truc2.jpg, je vai testé les différente solution se matin Merci pour votre aide, je vous tindedrez informez.  :sarcastic:


 
 
printf dans la doc.  :o

Code :
  1. printf("%04d", $ta_variable);


Message édité par Hermes le Messager le 05-07-2006 à 09:42:05
Reply

Marsh Posté le 05-07-2006 à 11:44:19    

anapajari a écrit :

elle te plait pas ma solution ???
Tiens encore plus bourrin comme ça, ça marche tout le temps:

Code :
  1. preg_replace('/(\d+)/e', $1+1);



 
EUh la je décroche, la solution à esox_ch est plus à mon niveau, car pour anapajari le truc c'est que je récupére un nom de fichier stocké dans une base de donnée sous la forme de P1.jpg et je veu incrementais le 1 pour navoir en sortie simplement P2 sans lextention que je remeterais plutar (soi jpg; pdf gif...).
te pour Hermes le Messager mettre une limite n'ennuie un peu car il y aurai un grand nombre de photo mais je ne connai se nombre( +5000 c'est sur)

Message cité 1 fois
Message édité par mule_panda le 05-07-2006 à 11:45:54
Reply

Marsh Posté le 05-07-2006 à 11:50:49    

ça l'air tordu ton histoire... explique nous à quoi ça sert

Reply

Marsh Posté le 05-07-2006 à 11:55:39    

Mouais ... La solution d'anapajari est quand même mieux (et plus class ) que la mienne ... M'enfin bon c toi :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-07-2006 à 11:56:34    

Code :
  1. preg_replace('/(\d+)\.*$/e', $1+1);


:o

Reply

Marsh Posté le 05-07-2006 à 11:59:58    

bon je vai tanté de tout expliqué (euh faite pas attention au fautes d'orthographe  :(  ) Donc je suis en train de creer une phototek pour un intranet. Les type de fichier suporté seront le gif, le jpeg et le pdf(y arrive pas encore). Une page servira a ajoutez une photo a la phototek, lor de leur telechargement un script php creer une miniature au format jpeg. Et stok le nom de la photo original, son dossier ou elle est rangée, son auteur... dans une base de donnée. Et en faite pour chaque nouveau ajout  d'image je vai cherchait dans la base de donner le nom de fichier le dernier enregistrer (ex: P56.jpg) et je le modifie pour creer le nouveau nom de limage en cour dupload ( ex: P57.jpg) et je lenregistre dans la base de donner.  J'espére que c'est clair  :??:  :p


Message édité par mule_panda le 05-07-2006 à 12:01:24
Reply

Marsh Posté le 05-07-2006 à 12:00:28    

mule_panda a écrit :

pour Hermes le Messager mettre une limite n'ennuie un peu car il y aurai un grand nombre de photo mais je ne connai se nombre( +5000 c'est sur)


 
Eh bien, tu mets 000001, il n'y aura pas plus de 999999 photos nan ?  :o  
 
Ma solution est de loin la plus optimisée. :o

Reply

Marsh Posté le 05-07-2006 à 12:02:36    

Hermes le Messager a écrit :

Eh bien, tu mets 000001, il n'y aura pas plus de 999999 photos nan ?  :o  
 
Ma solution est de loin la plus optimisée. :o


 
En faite tu vien de me donner la solution pour un autre probléme avec ceci printf("%04d", $ta_variable);  merci :jap:

Reply

Marsh Posté le 05-07-2006 à 15:46:12    

bon j'ai trouvé une solution
 
 

Code :
  1. $elements= explode("-", $maxnom);
  2. $nom=$elements[1];
  3. $elements2= explode(".", $nom);
  4. $nnom=$elements2[0];
  5. $nnom=$nnom+1;
  6. $nnom=$elements[0]."-".$nnom;


 
 
je sai c'est "sale", mais sa marche  :sweat:  
 
Merci a tous pour votre aide, trés bon forum  :hello:


Message édité par mule_panda le 05-07-2006 à 15:47:07
Reply

Marsh Posté le 05-07-2006 à 15:49:27    

moi je continue a dire qu'avec une regex et preg c'était plus simple :o :o :o

Reply

Marsh Posté le 05-07-2006 à 15:53:09    

Anapajari, laisse le :D Probablement pour ce qu'il fait c'est plus adapté


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-07-2006 à 16:05:17    

anapajari a écrit :

moi je continue a dire qu'avec une regex et preg c'était plus simple :o :o :o


 
Je te demande juste de m'expliquer comment cela marche ou plutot fonctionne? :ange:

Reply

Marsh Posté le 05-07-2006 à 16:50:19    

Lire la doc :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-07-2006 à 17:00:50    

allez en gros preg_replace execute une expression régulière ( tu peux jeter un oeil là si tu connais pas: http://www.regular-expressions.com/) et remplace les occurences qui sont vérifiées par ta pattern ( le 1er paramètre de la fonction) par le 2eme paramètre.
 
Après la syntaxe des regex est un peu particulière mais celle ci est assez simple


/                       #debut du délimiteur de la pattern
 (                      #on definit un motif ( c'est pour pouvoir le récuperer ensuite)
   \d                 #ce motif est composé d'un chiffres (\d c'est tous les chiffres de 0 a 9)
   +                  #présent au moins un fois
 )                     #fin du motif
 \.                    # suivi d'un point
 .                     # suivi de n'importe quel caractère ( c'est à ça que correspond le point ( les plus attentifs auront noté que je l'avais zappé dans ma regex au dessus ))
 *                     # présent au moins une fois ( dans ton cas vu que tu cherches uniquement les extensions jpg, gif, pdf on aurait pu remplacer .* par (jpg|gif|pdf)
 $                     # fin de la chaine
/                      # fin de la pattern
e                      # pour le préciser d'évaluer le contenu de replacement


Le e à la fin est obligatoire par sinon sur par exemple "P1.jpg" tu aurais obtenu "P$1+1", ce qui n'est pas ce que tu cherchais.
 
Dans la partie remplacement $1 correspond au motif trouvé ( dans notre cas les \d+), avec le e il evalue donc le bouzin est te donne P2.
 

Reply

Marsh Posté le 05-07-2006 à 17:02:56    

Maintenant reste plus qu'a voir s'il a compris :D
(Question a 2 balles, pourquoi utiliser \d au lieu de [0-9] ? A part le fait que c'est plus rapide à ecrire )


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-07-2006 à 17:06:59    

esox_ch a écrit :

Maintenant reste plus qu'a voir s'il a compris :D
(Question a 2 balles, pourquoi utiliser \d au lieu de [0-9] ? A part le fait que c'est plus rapide à ecrire )


s'plus rapide à ecrire :o

Reply

Marsh Posté le 05-07-2006 à 17:15:59    

A part ça, t'as vu sur le site de 99 bottles le truc en perl? T'y captes qqch toi ? :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-07-2006 à 21:59:44    

désolé si je passe pour le boulé du coin mais avec ce code :"preg_replace('/(\d+)\.*$/e', $1+1); " comment je lui dit quel variable il doit traité? :??:

Reply

Marsh Posté le 06-07-2006 à 09:22:01    

euh tu lis la doc [:spamafote]:

Citation :

Description
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit [, int &count]] )


Reply

Marsh Posté le 06-07-2006 à 09:45:15    

dsl je n'ai pas encore l'habitude d'aller lire la doc  :(

Reply

Marsh Posté le 06-07-2006 à 09:56:51    

si tu veux faire de l'informatique ton métier, tu va devoir lire des tonnes de docs et de site etc...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed