Rubino supporta l'utilizzo di stringhe di formato, come molte altre lingue:
[11] (pry) main: 0> '%3.3s' % 'f'
=> " f"
[12] (pry) main: 0> '%3.3s' % 'foo'
=> "foo"
[13] (pry) main: 0> '%3.3s' % 'foobar'
=> "foo"
Se si vuole pad a destra, utilizzare un -
nella stringa di formato:
[14] (pry) main: 0> '%-3.3s' % 'f'
=> "f "
[15] (pry) main: 0> '%-3.3s' % 'foo'
=> "foo"
[16] (pry) main: 0> '%-3.3s' % 'foobar'
=> "foo"
Si potrebbe anche usare printf
o sprintf
, ma preferisco il più generico %
, che è come sprintf
.
Dalle sprintf
documentazione:
s | Argument is a string to be substituted. If the format
| sequence contains a precision, at most that many characters
| will be copied.
e:
- | all | Left-justify the result of this conversion.
Cosa succede se voglio pad non con gli spazi, ma con qualche altro personaggio?
Il codice Ruby sottostante è scritto in C, ed è hard-coded per usare ' '
come il carattere di riempimento, in modo che non è possibile direttamente, a meno che non si desidera modificare il sorgente, ricompilare il Ruby, e vivere con un versione unica della lingua. Invece, si può fare qualcosa di simile:
[17] (pry) main: 0> ('%-3.3s' % 'f').gsub(' ', '.')
=> "f.."
Questo diventa molto più complicato di una semplice gsub
però. Spesso è meglio regolare la stringa senza utilizzare le stringhe di formato se è necessario fornire caratteri speciali. Le stringhe di formato sono molto potenti ma non sono totalmente flessibili.
Altrimenti, sceglierei qualcosa come la soluzione di @ steenslag, che è la base su cui basare il proprio. Perdi la possibilità di utilizzare le stringhe di formato e devi fare affidamento sul concatenare le tue stringhe o qualcosa di simile per ottenere l'output colonnare, ma funzionerà anche.
classica risposta :) – fl00r
Grazie. Sospettavo che dovesse esserci un modo elegante. Cosa succede se voglio eseguire il rilievo non con spazi ma con qualche altro personaggio? – Paul
Di per sé, 'sprintf' AKA' format' AKA '%' non supporta l'uso di caratteri pad alternativi, ma ci sono modi per aggirarlo. Puoi usare 'tr' o' gsub' per sostituire i caratteri del pad, a seconda che tu stia eseguendo il pad iniziale/finale o se hai spazi incorporati. –