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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top