2013-03-18 19 views
5

Ich analysiere einige Daten und organisiere sie, und jetzt muss ich sie in einer Variablen erfassen.Perl anhängende (s) printf-Ausgabe an String

Ich habe printf oder sprintf vorher noch nie verwendet.

Ich bin mit printf in einer Weise, wie dies die Daten zu organisieren:

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

Jetzt habe ich eine Variable, die einen String ist zu speichern, und ich möchte die organisierten Daten in die Variable $ result anhängen.

habe ich versucht, so etwas wie

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

und es funktioniert nicht. Ich habe auch versucht sprintf.

Irgendwelche Ideen?

Danke, S

+6

Ich denke, mit tun kann ich für alle hier sprechen, wenn ich sage „nicht Arbeit "ist die drittwenigste hilfreiche Diagnosemeldung aller Zeiten. Sagen Sie uns, was Sie erwartet haben und erzählen Sie uns, was tatsächlich passiert ist. – mob

+2

@mob Ich bin gespannt: Was sind die beiden am wenigsten hilfreichsten? – TLP

+1

Könnten Leute bitte aufhören, einzelne Variablen in Anführungszeichen zu schreiben? Würdest du es in C oder Python machen? Warum machst du es in Perl? Nennen wir es "nutzlose Verwendung der Variableninterpolation." Außerdem haben Sie \ n sowohl in Ihrer Formatzeichenfolge als auch im letzten Argument von printf. Wollten Sie wirklich zwei Zeilenvorschübe in Ihrer Ausgabe haben? – runrig

Antwort

1

Sie wissen nicht, was Sie meinen „versuchte sprintf auch“, weil es keinen Grund gibt, wäre es nicht, wenn man es richtig macht. Obwohl diese Syntax nicht wie Perl aussieht, eher wie Python oder Ruby?

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

Ich stimme für 'python' =) Setzen Sie Ihre Wette. –

+0

Danke für Ihre Hilfe. Ja, Entschuldigung für den Mangel an Spezifität in "es funktioniert nicht". Ich hätte genauer sein sollen. Es funktionierte, oder ich konnte die Sprintf-Formatierung innerhalb einer Variablen zum Anhängen an eine .txt-Datei speichern, indem ich die Variable an die Variable anfügte, wie du es gezeigt hast, oder die sprintf-Anweisung an eine Variable anfügte, wie ich es versuchte. – user1610717

+1

@ user1610717 '$ foo' ist nur eine Transitionsvariable, Sie könnten genauso einfach' sprintf' angehängt haben. – TLP

8

printf gibt das konstruierte String auf den angegebenen Griff (oder den aktuellen Standard, wenn weggelassen) und gibt einen Booleschen das anzeigt, ob ein IO-Fehler nicht aufgetreten ist, oder anzeigt. Nicht nützlich. sprintf gibt die konstruierte Zeichenfolge zurück, also möchten Sie dies.

zwei Strings verketten (hängen einem zum anderen), verwendet man den . Operator (oder join)

$result . sprintf(...) 

Aber du sagtest das funktioniert nicht. Vermutlich ist es, weil Sie auch die erzeugte Zeichenfolge in $result speichern möchten, die Sie

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

oder die kürzere

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