Comment faire pour forcer Ruby chaîne de n caractères
Comment forcer Ruby variable de chaîne de sortie à l'aide d' puts
à n caractères, de sorte que si la variable est plus long, il sera tronqué, si courte, il sera étendu par la fuite ou des espaces?
Est-il une méthode standard pour ce faire?
Vous devez vous connecter pour publier un commentaire.
Ruby prend en charge l'utilisation de chaînes de format, comme beaucoup d'autres langues:
Si vous voulez pad sur la droite, utilisez un
-
dans la chaîne de format:Vous pouvez également utiliser
printf
ousprintf
, mais je préfère le plus générique%
, qui est commesprintf
.De la
sprintf
docs:et:
Le sous-jacent du code Ruby est écrit en C, et il est codé en dur pour utiliser
' '
que le caractère de remplissage, ce qui n'est pas possible directement, sauf si vous souhaitez modifier la source, recompilez votre Ruby, et de vivre avec une version de la langue. Au lieu de cela, vous pouvez faire quelque chose comme:Cela devient beaucoup plus compliqué qu'un simple
gsub
bien. Souvent, il est préférable de régler la corde sans l'aide de chaînes de format si vous devez fournir des caractères spéciaux. Les chaînes de Format sont très puissants, mais ils ne sont pas totalement flexible.Sinon, je serais aller avec quelque chose comme @steenslag de la solution, qui est la base pour rouler vos propres. Vous perdez la possibilité d'utiliser les chaînes de format et de devoir compter sur la concaténation de vos chaînes ou quelque chose de similaire pour obtenir des colonnes de sortie, mais cela fonctionne également.
sprintf
AKAformat
AKA%
ne prennent pas en charge l'utilisation d'autres pavé de caractères, mais il ya des façons de contourner cela. Vous pouvez utilisertr
ougsub
de remplacer le tampon de caractères, en fonction de si vous êtes de sortie avant/après remplissage, ou si vous avez des espaces.Pour faire une chaîne de longueur fixe plus courte:
Pour faire une chaîne de longueur fixe plus:
Ils peuvent être combinés en quelque chose comme:
Où
str_var
est, bien sûr, votre chaîne deljust
str_var.slice(0..10)
Combine les
slice
méthode (les []) avecrjust
.Pour un pur Ruby un liner, vous pourriez faire ceci:
Qui donnera:
ou:
Si vous parlez d'une méthode de tronquer les chaînes, je voudrais vérifier hors ActionView::Assistants::TextHelper#tronquer
À partir des exemples: