web-dev-qa-db-ja.com

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);
 };
19
styris

タブで区切られたデータ(フィールドの長さが一貫していない)は、テキストエディターで開いたときに整列しません。

ソリューション:

  • スプレッドシートでファイルを開きます。
  • ワードプロセッサで開き、すべてのテキストを選択して、適切なタブ位置を定義します。 (ありがとう、 Justsalt
  • テキストエディタで、タブの幅をどのフィールドよりも大きい値に設定します。
  • タブの代わりにスペースを使用します(例: printf with field widths、 formats )。

たとえば、

printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash);

- 後に %は、フィールドを左揃えにします。数値(お金など)は通常、右寄せされます(これがデフォルトです)。

28
cjm

Perl format コマンドを見てください。

6
Paul Tomblin

Perl6 :: Form CPANモジュールを見てください。

この以前の質問/回答 Perl形式に類似した他の言語の機能やライブラリにあるもの は、stackoverflowで役立つ場合があります。

4
draegtun

Cのprintfに加えて、「*」を使用して幅を動的に調整できます。

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");
2
Adam Flott

Linuxで作業している場合、簡単な解決策は、-tフラグを指定した column システムコマンドを使用することです。スペースで区切られたテーブルをファイルに出力し、そのファイルでcolumnコマンドを使用するだけです。

system("column -t file > new_file"); 
1
Mattan

PrintfはCの場合と同様にこれを行います。20文字のフィールドの場合:

printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money);
1
Brian Carlton