2011-07-06 16 views
5

Voglio formattare l'output di una stringa in ruby. Posso farlo usando% ma non riesco a capirlo.come formattare l'output della stringa usando% in ruby?

Invece di 201107070928 voglio uscita 2011\07\070928

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

mi dà un errore: `% ': troppo pochi argomenti (ArgumentError)

risposta

5

Ho intenzione di mettere questo in una risposta piuttosto che un commento solo perché sono più impressionato dalla possibilità. Utilizzando String#unpack, siamo in grado di gestire un 4 cifre/2 cifre/nulla con:

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

Sono molto contento di decomprimere troppo :-) – Radek

9

non è così che lo si utilizza per la formattazione di una data. Il modo di usare % formattazione:

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

Quindi, è necessario più parametri - uno per ciascuna delle identificatori di formato.

Se avete bisogno di stampare & formato di una data da una stringa aggiornate, prima convertire la stringa in un oggetto data/ora e quindi utilizzare strftime:

Presumendo l'ingresso è data e un tempo:

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

Quindi, c'è un modo di dire: prendere primi 4 caratteri da una stringa quindi aggiungere \\ poi prendere 2 caratteri dalla stessa stringa quindi aggiungere \\ e quindi il resto della stringa? – Radek

+2

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

+1

Presumendo l'input è la data e un'ora: 'Time.parse (" 201107070928 "). Strftime ("% Y \\% m \\% d% H% M ")'. – Zabba

Problemi correlati