Perlで整列した列にテキストを書き込むにはどうすればよいですか?
質問
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
フィールド幅を使用するか、フォーマット)。
たとえば、使用する可能性があります
printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash);
%
の後の-
は、フィールドを左揃えにします。数字(お金など)は通常、右揃えです(これがデフォルトです)。
他のヒント
Perlの format コマンドをご覧ください。
Perl6 :: Form CPANモジュールをご覧ください。
>この前の質問/回答 stackoverflowのPerl形式に類似した機能やライブラリを持つ他の言語が役立つ場合があります。
方法Cのprintfに加えて、" *"で幅を動的に調整できます。
printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");
printfは、Cの場合と同様にこれを行います。20文字のフィールドの場合:
printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money);
Linuxで作業している場合、簡単な解決策は column を使用することです-tフラグを指定したa>システムコマンド。スペース区切りのテーブルをファイルに出力し、そのファイルに対してcolumnコマンドを使用するだけです。
system("column -t file > new_file");
所属していません StackOverflow