2009-03-06 8 views
18

私は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); 
}; 

答えて

26

タブ区切りのデータを。

ソリューション:

  • スプレッドシートのファイルを開きます。
  • ワードプロセッサで開き、すべてのテキストを選択し、適切なタブストップを定義します。 (thanks、Justsalt
  • テキストエディタで、タブの幅をいずれのフィールドよりも大きな値に設定します。
  • タブの代わりにスペースを使用してください(例:フィールド幅がprintfformats)。

たとえば、あなたが%

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

-を使用する場合がありますが、フィールドは左寄せされます。通常、金額のような数値が右寄せになります(これがデフォルトです)。

+1

ワードプロセッサで開き、適切なタブストップを定義します。 – Justsalt

6

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

+0

新しいプロジェクトにはフォーマットを使用しないで、代わりにPerl6 :: Formを使用します。 –

1

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

printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money); 
+0

左揃えにするには%-20にする必要がありますか? –

+0

どうすれば左揃えにすることができますか? –

+0

@styris:Daniel Lさんのこの質問に対するコメントを参照してください。 –

2

方法C言語のprintfに加えて、あなたがLinux上で作業している場合、簡単な解決策はで、columnシステムコマンドを使用することであろう、「*」を使用して動的に

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

を幅を調整することができます - tフラグ。スペース区切りテーブルをファイルに出力して、そのファイルに対してcolumnコマンドを使用するだけです。

system("column -t file > new_file"); 
関連する問題