Pregunta

Estoy trabajando con los ID de OPE. Un archivo que tiene con dos ceros de salida, por ejemplo, [998700, 1001900]. El otro archivo que tiene con uno o dos ceros a la izquierda para una longitud total de seis, por ejemplo, [009987, 010019]. Quiero convertir todos los ID OPE (en ambos archivos) a una cadena de ocho dígitos con exactamente dos ceros a la izquierda y sin embargo muchos ceros al final de conseguir que sea ocho dígitos de longitud.

¿Fue útil?

Solución

Prueba esto:

a = [ "00123123", "077934", "93422", "1231234", "12333" ]
a.map { |n| n.gsub(/^0*/, '00').ljust(8, '0') }

=> ["00123123", "00779340", "00934220", "001231234", "00123330"]

Otros consejos

Si ha analizado los datos y se almacenan como cadenas, se podría hacer de esta manera, por ejemplo.

n = ["998700", "1001900", "009987", "0010019"]
puts n.map { |i|
    i =~ /^0*([0-9]+?)0*$/
    "00" + $1 + "0" * [0, 6 - $1.length].max
}

Salida:

00998700
00100190
00998700
00100190

Este ejemplo en teclado .

Estoy nota muy seguro, sin embargo, que me dieron la descripción exactamente correcto. Por favor verifique en los comentarios y en lo correcto en el caso de que no es exactamente lo que estaba buscando.

Con la ayuda de las respuestas dadas por @detunized y @nimblegorilla, se me ocurrió:

"998700"[0..-3].rjust(6, '0').to_sym

para hacer que el primer formato que he descrito (siempre con dos ceros) igual a la segunda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top