2011-07-06 17 views
5

Chcę sformatować wyjściowy ciąg w ruby. Mogę to zrobić za pomocą%, ale nie mogę tego rozgryźć.jak sformatować ciąg znaków za pomocą% w ruby?

Zamiast 201107070928 Chcę wyjście 2011\07\070928

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

daje mi błąd: `% ': zbyt mało argumentów (ArgumentError)

Odpowiedz

5

Zamierzam umieścić to w odpowiedzi, a nie w komentarzu tylko dlatego, że jestem bardziej pod wrażeniem tej możliwości. Korzystanie String#unpack możemy obsługiwać 4-cyfrowy/2-cyfrowy/nic z:

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

Bardzo się cieszę z rozpakowywania :-) – Radek

9

to nie jest, jak go używać do formatowania daty. Sposób korzystania % formatowanie jest:

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

Tak, trzeba wiele parametrów - po jednym dla każdego z formatami.

Jeśli trzeba wydrukować formatu & randkę z ciągu aktualne, najpierw przekonwertować ciąg na datę/obiektu w czasie, a następnie użyć strftime:

Zakładając wejście jest data i czas:

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

tak, to czy jest jakiś sposób, aby powiedzieć: weź pierwsze 4 znaki z łańcucha następnie dodać \\ następnie wziąć 2 znaki od ten sam ciąg, a następnie dodać \\, a następnie resztę ciągu? – Radek

+2

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

+1

Przyjmując dane wejściowe jest data i godzina: 'Time.parse (" 201107070928 "). Strftime ("% Y \\% m \\% d% H% M ")'. – Zabba

Powiązane problemy