- ベストアンサー
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,名前,タイトル・・・・ この対策方法を教えて頂きたいのです。 どうぞよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たぶん、 print "@line"; としているのでは? print @line; でうまくいくはずです。
その他の回答 (1)
- natsuki_tk
- ベストアンサー率35% (99/279)
\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"; }
補足
ご回答ありがとうございます。 スペースの件は、下で解決致しました。 ありがとうございました。 改行の件も、何とか解決致しました。 newlogを@配列に戻して、HTMLに書き出そうとしていましたが その処理が間違えていました。 @lines =$in{'newlog'}; とすると、newlogが配列に戻るかと思っていたのですが、これではおかしいですよね。 下記の様にしてから @linesで書き出しましたら 解決致しました。 @lines = split(/\n/, $in{'newlog'}); print @lines; 皆様 ありがとうございました。
お礼
ごめんなさい! 一旦EOMで閉じて、print @lines; にしましたら 半角スペースはなくなりました。 ありがとうございました。 あとは、改行が増えてしまう件を頑張ってみますが 何か分かりましたらヒントをお願い致します。
補足
お返事ありがとうございます。 下記のようになっていますが、何か問題点は見あたりますでしょうか? 色々やってみまして、文字コードが 問題のような気もするのですが・・・ 関係ないことかもしれませんが、CGIをエディタで 読み込む時に、「属性情報が一致しません・・・」のようなエラーが出ます。(エラーが出ても読み込めますが・・) また、何かありましたら、どうぞお願い致します。 ----------- print <<EOM; 省略 <texterea> @lines </texterea> 省略 EOM -----------