2011-07-06 24 views
5

Quiero formatear la salida de una cadena en ruby. Puedo hacerlo usando% pero no puedo resolverlo.cómo formatear la salida de cadena usando% en ruby?

En lugar de 201107070928 Deseo emitir 2011\07\070928

puts "%.4s\\%.2s\\%s" % "201107070928" 

me da un error: `% ': muy pocos argumentos (ArgumentError)

Respuesta

5

Voy a poner esto en una respuesta en lugar de un comentario simplemente porque estoy más impresionado con la posibilidad. Usando String#unpack, podemos manejar un 4 dígitos/2 dígitos/nada con:

"201107070928345345345".unpack("a4a2a*").join('/') 
=> "2011/07/070928345345345" 
+0

Estoy muy contento con el desempaquetado también :-) – Radek

9

eso no es cómo lo usa para dar formato a una fecha. La manera de utilizar % formato es:

puts "%.4s\\%.2s\\%s" % ["1","2","3"] 

lo tanto, necesita múltiples parámetros - una para cada uno de los especificadores de formato.

Si necesita imprimir & formato de una fecha a partir de una cadena de fecha, primero convertir la cadena en un objeto de fecha/hora y luego usar strftime:

Suponiendo que la entrada es fecha y una hora:

Time.parse("201107070928").strftime("%Y\\%m\\%d%H%M"). 
+0

Así que, ¿hay alguna manera de decir: tomar primeros 4 caracteres de una cadena a continuación, añadir \\ luego tomar 2 caracteres de la misma cadena, luego agrega \\ y luego el resto de la cadena? – Radek

+2

's =" 201107070928 "; pone "% s \\% s \\% s"% [s [0 ... 4], s [4 ... 6], s [6 ..- 1]] '=>' 2011 \ 07 \ 070928' –

+1

Suponiendo que la entrada es una fecha y una hora: 'Time.parse (" 201107070928 "). Strftime ("% Y \\% m \\% d% H% M ")'. – Zabba

Cuestiones relacionadas