Page 1 sur 1

numéroter fichiers en commençants en 00001 (exempl)

Posté : 11 févr. 2007, 22:53
par Davee
Bonjour tous le monde,

J'ai besoin de renommer et de numéroter une suite de fichiers.
la variable "$i" incrémente la fin des fichiers par un nombre.
Il faudrait que je retrouve les fichier toujour dans l'ordre croissant.

C'est à dire: 01,02,...,09,10,11,...
et non pas : 1,10,...,19,2,20,21,...,29,3,30,31,...

Car si j'ai besoin de les renommer, il prend les fichiers dans l'ordre ou ils viennent mais pas dans l'ordre croissant.
Vous vous apercevez donc qu'il va renommer le fichier :
"nom du fichier10"
en
"nom du fichier2"

et il y a un ordre à respecter avec les images, et j'aimerais pouvoir mettre un ou plusieurs zéro avant le chiffre 1 pour que le nombre "10" soit réellement en 10ème position dans le dossier.

voici le code que j'ai bidouillé, je ne vois pas comment mettre ce zéro devant le chiffre de la variable"$i";
<?php

$i=1;
$chemin="dossier/";

if ($handle = opendir('dossier')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
	    $oldfile=$chemin.$file;
            $newfile= $chemin."nom de fichier".$i.".jpg";
	    if (eregi( ".jpg$", $oldfile)){
		rename ("$oldfile", "$newfile");
		echo'<br>---new name:'.$i.'<br>';
		$i++;
	    }
        }
    }
   closedir($handle);
}
?>
Ma démarche n'est peut-être pas bonne, n'ésitez pas à me le dire je vais pas me vexer :)

Merci d'avance pour vos conseils, j'espère que mes explications sont assez claire.

Cheers
David.

Posté : 12 févr. 2007, 00:15
par Jules Petibidon
hello,

sprintf() est bon pour ce que tu as !

Posté : 12 févr. 2007, 00:17
par Ajoloca
Bonsoir,

La fonction str_pad() te permet de faire ce que tu souhaites.

Sinon tu as aussi la solution sprintf().

Re: numéroter fichiers en commençants en 00001 (exempl)

Posté : 12 févr. 2007, 01:55
par @rthur
Il faudrait que je retrouve les fichier toujour dans l'ordre croissant.

C'est à dire: 01,02,...,09,10,11,...
et non pas : 1,10,...,19,2,20,21,...,29,3,30,31,...
Bonjour,

Si tu dois récupérer tes fichiers "dans l'ordre" via PHP, alors tu peux les numéroter 1, 2, 3..., 10, 11 car avec la fonction natsort tu les récupérera correctement:
http://fr.php.net/natsort

Posté : 12 févr. 2007, 02:05
par Davee
Merci Jules Petibidon et Ajoloca

J'ai réussi avec str_pad
<?php

$i=1;
$chemin="dossier/";

if ($handle = opendir('dossier')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $r = str_pad($i, 5, "0", STR_PAD_LEFT); 
        $oldfile=$chemin.$file;
        $newfile= $chemin."nom de fichier".$r.".jpg";
        $afficheImg= "nom de fichier".$r.".jpg";
        if (eregi( ".jpg$", $oldfile)){
        rename ("$oldfile", "$newfile");
        echo'<br>---new name:'.$afficheImg.'<br>';
        $i++;
        }
        }
    }
   closedir($handle);
}
?> 
ça marche bien ouf!

Si ça vous dérange pas j'aimerais quand même continuer un petit peu parcequ'avec la Fonction printf j'ai eu des petits souci et j'aimerais bein savoir pourquoi.

Voilà le code avec lequel j'ai obtenu ceci.

00014
<?php
$r='1';
$i= printf("%04d",$r);
echo $i;
?> 
Je comprends pas pourquoi il met le chiffre 4 après le 1
comprenez mon interrogation car le code est fort simple ma fois, mais voilà pfff. pour moi cette magie du quatre est tout de même un mystère.

Merci d'avance

Posté : 12 févr. 2007, 02:07
par Davee
hi @rthur
je viens juste de voir ton post.

Natsort me semble bien intéressant. je jete un coup d'oeil.

Merci David.

Posté : 12 févr. 2007, 09:42
par Ajoloca
Bonjour,
Je comprends pas pourquoi il met le chiffre 4 après le 1
Je n'ai pas d'explication, normalement ça devrait donner ce que tu attends.

Essaie de le forcer (donner explicitement le caractère de remplissage) comme ceci (l'apostrophe en plus)
printf("%'04d", 1);