2

少し問題が発生しました。もともと、次の形式の入力があります。

12345     apple
12     orange

最初の列を $num として保存し、2 番目の列を $fruit として保存しました。出力を次のようにしたい (以下を参照)。$num がすべて同じ長さであるかのように、出力を揃えたいと思います。実際には、$num は可変長の数値で構成されます。

12345     apple
12        orange

提案どおり、次のコードを使用します。

$line = sprintf "%--10s %-20s", $num, $fruit;

このソリューションはコマンドライン表示ではうまく機能しますが、HTML 経由で表示しようとすると、このフォーマットは保持されません。例えば..

print "<html><head></head><body>
        $line
        </body></html>";

これにより、フォーマット前のオリジナルと同じ出力が生成されます。HTML Webベースの表示でsprintfフォーマットを保持する方法について提案はありますか? $num を空白で埋めようとしましたが、次のコードはうまくいかないようです。

$num .= (" " x (10 - length($num)));

とにかく、私は何か提案をいただければ幸いです。ありがとう!

4

3 に答える 3

11

HTML は余分な空白を無視します。そして、おそらくプロポーショナル フォントで表示されているということは、余分なスペースがあったとしても整列しないということです。

簡単なオプションは、テキストを <pre> タグで囲むことです。これは、デフォルトでモノスペース フォントと空白が保持された状態で表示されます。または、コードで HTML テーブルを生成することもできます。

于 2009-10-08T05:45:48.313 に答える
4

HTML は、連続するすべてのスペースを 1 つのスペースに圧縮します。出力をテーブルのように並べたい場合は、実際に値を HTML テーブルに配置する必要があります。

于 2009-10-08T05:46:26.877 に答える
3

の 'pre'は、ステートメントの出力を正確に記述するpreformatted<pre>を意味します。したがって、フリードからの提案と私は、他の人だと思います。sprintf()

于 2009-10-08T05:49:09.563 に答える