2013-03-18 11 views
5

Sto analizzando alcuni dati e organizzandoli, e ora ho bisogno di catturarli all'interno di una variabile.Perl accodamento (s) printf uscita alla stringa

Non ho mai usato printf o sprintf prima di questo.

sto utilizzando printf in un modo come questo per organizzare i dati:

printf("%-30s %18s %18s\n", "$a", "$b", "$c\n"); 

ora ho una variabile che è la memorizzazione di una stringa, e voglio aggiungere i dati organizzati al risultato variabile $.

ho provato qualcosa di simile

$result.printf("%-30s %18s %18s\n", "$a", "$b", "$c\n"); 

e non funziona. Ho provato anche lo sprint.

Qualche idea?

Grazie, S

+6

Credo di parlare a nome di tutti qui quando dico "non lo fa lavoro "è il terzo messaggio diagnostico meno utile di tutti i tempi. Dicci cosa ti aspettavi che succedesse e dicci cosa è successo realmente. – mob

+2

@mob Sono curioso: quali sono i due migliori meno utili? – TLP

+1

Le persone potrebbero smettere di avvolgere variabili solitarie con le virgolette? Lo faresti in C o Python? Perché lo fai in Perl? Chiamiamolo "Uso inutile dell'interpolazione variabile". Inoltre, hai \ n sia nella stringa di formato che nell'ultimo argomento di printf. Volevi davvero due linefeed nel tuo output? – runrig

risposta

1

Non so che cosa si intende per "sprintf provato troppo", perché non c'è ragione che non avrebbe funzionato, se lo fai bene. Anche se quella sintassi che hai mostrato non assomiglia molto a Perl, più come pitone o rubino?

my $foo = sprintf("%-30s %18s %18s\n", "$a", "$b", "$c\n"); 
$result .= $foo; 
+0

Io voto per 'python' =) Fai la tua scommessa. –

+0

Grazie per il vostro aiuto. Sì, mi dispiace per la mancanza di specificità in "non funziona". Avrei dovuto essere più specifico Ha funzionato, o sono stato in grado di salvare la formattazione sprintf all'interno di una variabile per accodare un file .txt, aggiungendo variabile a variabile come hai mostrato, accodando l'istruzione sprintf a una variabile come stavo tentando di fare. – user1610717

+1

@ user1610717 '$ pippo' è solo una variabile di transizione, si potrebbe facilmente aggiungere' sprintf'. – TLP

8

printf emette la stringa costruito all'impugnatura specificata (o predefinito corrente se omesso) e restituisce un booleano che indica se si è verificato un errore IO o meno. Inutile. sprintf restituisce la stringa costruita, quindi lo vuoi.

per concatenare due stringhe (aggiungere uno all'altro), si usa l'operatore . (o join)

$result . sprintf(...) 

Ma hai detto che questo non funziona. Presumibilmente, è perché anche voi volete memorizzare la stringa prodotta in $result, che si può fare utilizzando

$result = $result . sprintf(...); 

o minore

$result .= sprintf(...);