• 締切済み

CGI出力での改行位置について

表形式のデータをエクセルからテキストファイルでFTPし、そのデータをCGIで表示するものを作成中です。 FTPまで8割くらいできたところで、CGI(perl)に取り掛かり、まず、データの読み込みが出来ていることを確認するために、読んだデータをそのまま打ち出すルーチンをつくり、小さなデータで実行してみたところ以下の事象が起こりました。 ---- perlのコード(部分) ---- foreach $line (@lines) { @a = split(/,\t/, $line); foreach $a (@a) { print "<$a> "; } print "<br>\n"; } ------------------ @linesはデータの項目群(1行分)のイメージです。項目の区切り文字として「,\t」を使用しています。 ---結果のブラウザ表示の例(一部)--- <[Format]> <#FFFFFF> <#555555> <#F8F8FA> <true > ---------------------------- 表示された最後の項目(上例の場合true)の後にスペースが開いてしまいます。 いろいろ調べたところ、データには異常ない(スペースはない)ですし、試行錯誤して最後に気がついたのがブラウザ表示のソースを見ること ---ブラウザのソース--- <[Format]> <#FFFFFF> <#555555> <#F8F8FA> <true > <br> --------------------- となっており、ソースの改行がスペースの原因ということまではわかりました。 また、上記例は5項目ですが、行により項目数が違いますが、全行とも必ず最後の項目の右括弧(>)の前で改行されてしまっています。 CGI側からの出力は<br>の後の改行だけだと思っているのですが、なぜ最終項目だけ改行がはいるのでしょうか? しかも>の前に・・・ データはちゃんと読めているようなので、作業をすすめる上では問題ないのですが、どうも気になりますのでどなたかヒントをお願いします。(なお、サーバはUNIXのはずです。)

みんなの回答

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

@line にファイルから読み込んだデータがそのまま入っているのでは ないでしょうか。例えば、こんな感じで @line = <> ; そうであれば、chomp @line として各行にある行末の改行をとればよい です。

fujillin
質問者

お礼

気が付きませんでした。おはずかしい。 多分その通りですね。お手数かけました。

すると、全ての回答が全文表示されます。

関連するQ&A