pad Rubino String a zero OPE ID
Domanda
Sto lavorando con gli ID OPE. Un file li ha con due zeri finali, ad esempio, [998700, 1001900]
. L'altro file li ha con uno o due zeri per una lunghezza totale di sei, per esempio, [009987, 010019]
. Voglio convertire ogni ID OPE (in entrambi i file) ad una stringa di otto cifre, con esattamente due zeri e tuttavia molti zeri alla fine per arrivare ad essere otto cifre.
Soluzione
Prova questo:
a = [ "00123123", "077934", "93422", "1231234", "12333" ]
a.map { |n| n.gsub(/^0*/, '00').ljust(8, '0') }
=> ["00123123", "00779340", "00934220", "001231234", "00123330"]
Altri suggerimenti
Se avete i dati analizzati e memorizzati come stringhe, potrebbe essere fatto in questo modo, per esempio.
n = ["998700", "1001900", "009987", "0010019"]
puts n.map { |i|
i =~ /^0*([0-9]+?)0*$/
"00" + $1 + "0" * [0, 6 - $1.length].max
}
Output:
00998700
00100190
00998700
00100190
In questo esempio su tastiera codici .
Sono note molto sicuro, però, che ho avuto la descrizione esattamente a destra. Si prega di verificare i commenti e ho corretto nel caso in cui non è esattamente quello che stavi cercando.
Con l'aiuto delle risposte fornite dal @detunized & @nimblegorilla, mi si avvicinò con:
"998700"[0..-3].rjust(6, '0').to_sym
per fare il primo formato descritto (sempre con due zeri finali) uguale al secondo.