Jolie taille de fichier dans Ruby?
Je suis en train de faire une méthode qui convertit un entier qui représente octets d'une chaîne avec un " prettied jusqu'format.
Voici mon demi-travail tentative:
class Integer
def to_filesize
{
'B' => 1024,
'KB' => 1024 * 1024,
'MB' => 1024 * 1024 * 1024,
'GB' => 1024 * 1024 * 1024 * 1024,
'TB' => 1024 * 1024 * 1024 * 1024 * 1024
}.each_pair { |e, s| return "#{s /self}#{e}" if self < s }
end
end
Ce que je fais mal?
source d'informationauteur TeamBlast
Vous devez vous connecter pour publier un commentaire.
Comment au sujet de la Taille de gemme ? Il semble être en mesure de convertir des octets (et autres formats) dans de jolis imprimés valeurs:
exemple:
http://rubygems.org/gems/filesize
Si vous l'utilisez avec Rails - ce que sur les Rails numéro de l'aide?
http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_human_size
number_to_human_size(number, options = {})
?
Je suis d'accord avec @David, il est probablement préférable d'utiliser une solution existante, mais pour répondre à votre question au sujet de ce que vous faites mal:
s
parself
plutôt que l'inverse.s
donc le divisers
par 1024.Donc:
vous permet de:
Encore une fois, je ne recommande pas réellement le faire, mais il semble en vaut la correction de bugs.
Vous obtenez des points pour l'ajout d'une méthode à l'Entier, mais cela semble de plus en plus de Fichiers spécifiques, je vous suggère monkeying autour de Fichier, par exemple par l'ajout d'une méthode pour Fichier appelé .prettysize().
Mais ici, c'est une solution alternative qui utilise itération, et évite l'impression de les octets en tant que float 🙂
C'est ma solution:
Par rapport à d'autres solutions, c'est plus simple, plus efficace, et génère une plus bonne sortie.
Format
Les deux
to_filesize
etto_human
ont des problèmes avec de grands nombres.format_mb
a un drôle de cas où, par exemple, '1 MiB" est considéré comme "1024 Ko" qui est quelque chose que l'on pourrait vouloir, mais certainement pas moi.Performance
Aussi, il a le meilleur rendement.
J'ai testé chaque mise en œuvre réaliste le générateur de nombre aléatoire:
@Darshan de Calcul de la solution n'est que partielle ici. Depuis les clés de hachage ne sont pas garantis pour être commandé cette approche ne fonctionnera pas de manière fiable. Vous pouvez résoudre ce problème en faisant quelque chose comme cela à l'intérieur de la to_filesize méthode,
C'est ce que j'ai fait pour une méthode similaire à l'intérieur du Flotteur,