• ベストアンサー

perlで作成中ですが、改行がおかしいです

よろしくお願いします data.txtに 入っているデータをすべて読み込み(@lines)、HTMLのテキストエリアにそのまま@linesで書き出すと、 ------------texterea------------ 1,名前,タイトル・・・・  2,名前,タイトル・・・・  3,名前,タイトル・・・・ ------------/texterea----------- というように、テキストエリアには、2行目以降の行頭に半角スペースが出てしまいます。 まずは、こちらを正しく表示する方法を教えてください。 また、このテキストエリアで データを訂正したものを、再びdata.txtに書き込みたいのですが name=newlogでクエリして、 print OUT $in{'newlog'}; としてdata.txtにそのまま書き出そうとすると、ログには改行が増えてしまい、下記のようにログがどんどん壊れていってしまいます。 1,名前,タイトル・・・・  2,名前,タイトル・・・・  3,名前,タイトル・・・・ この対策方法を教えて頂きたいのです。 どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

たぶん、 print "@line"; としているのでは? print @line; でうまくいくはずです。

angelusbell
質問者

お礼

ごめんなさい! 一旦EOMで閉じて、print @lines; にしましたら 半角スペースはなくなりました。 ありがとうございました。 あとは、改行が増えてしまう件を頑張ってみますが 何か分かりましたらヒントをお願い致します。

angelusbell
質問者

補足

お返事ありがとうございます。 下記のようになっていますが、何か問題点は見あたりますでしょうか? 色々やってみまして、文字コードが 問題のような気もするのですが・・・ 関係ないことかもしれませんが、CGIをエディタで 読み込む時に、「属性情報が一致しません・・・」のようなエラーが出ます。(エラーが出ても読み込めますが・・) また、何かありましたら、どうぞお願い致します。 ----------- print <<EOM; 省略 <texterea> @lines </texterea> 省略 EOM -----------

その他の回答 (1)

回答No.2

\nがついているデータに、 さらに\nをつけて書き出していないでしょうか? 簡単に直すには、 いったんchomp $in{'newlog'};してから、 データに書き出してやれば良いかと思います。 (もしくは二重に入らないようにどちらかを消したり等) 最初に半角の空白が入ってしまうのは、 my @line = qw(this is a perly pen); print "@line"; としたときに、 "thisisaperlypen"ではなくて、 "this is a perly pen"と出力されるように、 という設計上の工夫によるものです。 (その方が見やすいでしょ?とLarryWall氏の何かの発言にありました) 例えば、こんな感じで回避します。 (printの内容が@logだけなら""を取れば良いだけで意味ないですが・・) {   local $";   print "@log"; }

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=651491
angelusbell
質問者

補足

ご回答ありがとうございます。 スペースの件は、下で解決致しました。 ありがとうございました。 改行の件も、何とか解決致しました。 newlogを@配列に戻して、HTMLに書き出そうとしていましたが その処理が間違えていました。 @lines =$in{'newlog'}; とすると、newlogが配列に戻るかと思っていたのですが、これではおかしいですよね。 下記の様にしてから @linesで書き出しましたら 解決致しました。 @lines = split(/\n/, $in{'newlog'}); print @lines; 皆様 ありがとうございました。

関連するQ&A