267 votes

Comment puis-je sortie de zéros en Ruby?

Je suis sortie un ensemble de fichiers numérotés à partir d'un script Ruby. Les chiffres proviennent de l'incrémentation d'un compteur, mais pour les faire trier bien dans le répertoire, je voudrais utiliser les zéros non significatifs dans les noms de fichiers. En d'autres termes

file_001...

au lieu de

file_1

Est-il un simple moyen d'ajouter des zéros non significatifs lors de la conversion d'un nombre en une chaîne de caractères? (Je sais que je peux le faire "si moins de 10.... si moins de 100").

375voto

Daniel Martin Points 9148

Utiliser l' % de l'opérateur avec une chaîne de caractères:

irb(main):001:0> "%03d" % 5
=> "005"

La partie gauche est un format de printf, et le côté droit peut être une liste de valeurs, de sorte que vous pourriez faire quelque chose comme:

irb(main):002:0> filename = "%s/%s.%04d.txt" % ["dirname", "filename", 23]
=> "dirname/filename.0023.txt"

Voici un printf format de feuille de triche que vous pourriez trouver utiles dans la formation de votre chaîne de format. Le format de printf est à l'origine de l' C fonction printf,, mais même le formatage de fonctions sont disponibles en perl, ruby, python, java, php, etc.

307voto

neutrino Points 11643

Si le nombre maximal de chiffres du compteur est connu (par exemple, n = 3 pour les compteurs de 1..876), vous pouvez le faire

str = "file_" + i.to_s.rjust(n, "0")

53voto

Ólafur Waage Points 40104

Vous ne pouvez simplement utiliser la mise en forme de chaîne de la valeur avant de vous concat le nom de fichier?

"%03d" % number

35voto

testr Points 155

Utiliser String#next que le comptoir.

>> n = "000"
>> 3.times { puts "file_#{n.next!}" }
file_001
file_002
file_003

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X