Ruby pad chaîne zéro ID OPE
Question
Je travaille avec les ID OPE. Un fichier a avec deux les zéros de suivi, par exemple, [998700, 1001900]
. L'autre fichier les a avec un ou deux zéros pour une menant longueur totale de six ans, par exemple, [009987, 010019]
. Je veux convertir chaque ID OPE (dans les deux fichiers) à une chaîne de huit chiffres avec exactement deux zéros principaux et cependant beaucoup de zéros à la fin de l'obtenir soit huit chiffres.
La solution
Essayez ceci:
a = [ "00123123", "077934", "93422", "1231234", "12333" ]
a.map { |n| n.gsub(/^0*/, '00').ljust(8, '0') }
=> ["00123123", "00779340", "00934220", "001231234", "00123330"]
Autres conseils
Si vous avez vos données analysables et stockées sous forme de chaînes, il pourrait se faire comme ça, par exemple.
n = ["998700", "1001900", "009987", "0010019"]
puts n.map { |i|
i =~ /^0*([0-9]+?)0*$/
"00" + $1 + "0" * [0, 6 - $1.length].max
}
Sortie:
00998700
00100190
00998700
00100190
Je suis note très sûre cependant, que je suis la description tout à fait exact. S'il vous plaît vérifier les commentaires et je raison dans le cas où ce n'est pas exactement ce que vous recherchez.
Avec l'aide des réponses données par @detunized & @nimblegorilla, je suis venu avec:
"998700"[0..-3].rjust(6, '0').to_sym
pour le premier format que je décrit (toujours avec deux zéros) égal au second.