Perlからファイルに書き込もうとしています。データをタブ区切り形式で書き込みたいだけです。しかし、私が書いているデータはさまざまな長さを持ち、並んでいません。
たとえば、私はこのようなものを書こうとしています:
Name Education Fav_Car MoneyInBank
josh High School Porche 500
SomeOtherName PHD Hyundai 50000
上にあるヘッダーにデータを合わせたいだけです。
私はそのようなデータを出力しています:
printf FILE ("%s%20s%20s\n", "Name", "Ed", "Car");
while (($name, $ed, $car) = $sth->fetchrow_array) {
printf FILE ("%s>>>>>>>>>>>>>%40s%40s\n", $name, $ed, $car);
};
タブで区切られたデータ(フィールドの長さが一貫していない)は、テキストエディターで開いたときに整列しません。
ソリューション:
printf
with field widths、 formats )。たとえば、
printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash);
-
後に %
は、フィールドを左揃えにします。数値(お金など)は通常、右寄せされます(これがデフォルトです)。
Perl format コマンドを見てください。
Perl6 :: Form CPANモジュールを見てください。
この以前の質問/回答 Perl形式に類似した他の言語の機能やライブラリにあるもの は、stackoverflowで役立つ場合があります。
Cのprintfに加えて、「*」を使用して幅を動的に調整できます。
printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");
Linuxで作業している場合、簡単な解決策は、-tフラグを指定した column システムコマンドを使用することです。スペースで区切られたテーブルをファイルに出力し、そのファイルでcolumnコマンドを使用するだけです。
system("column -t file > new_file");
PrintfはCの場合と同様にこれを行います。20文字のフィールドの場合:
printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money);