19

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);
 };
4

6 に答える 6

28

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

ソリューション:

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

たとえば、次のように使用できます。

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

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

于 2009-03-06T16:19:49.163 に答える
6

Perl形式のコマンドを見てください。

于 2009-03-06T16:20:31.877 に答える
4

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

前の質問/回答スタック オーバーフローの Perls 形式に似た機能やライブラリが他の言語にある が役立つ場合があります。

于 2009-03-06T17:27:00.780 に答える
2

Cのprintfのようなやり方に加えて、「*」で幅を動的に調整できるので、

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");
于 2009-03-07T20:25:58.097 に答える
1

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

printf("%20s%20s%20s$20S\n", $name, $ed, $car, $money);
于 2009-03-06T16:21:44.137 に答える