Perlで整列した列にテキストを書き込むにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/619393

  •  03-07-2019
  •  | 
  •  

質問

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);
scroll top