• ベストアンサー

データの削除をしたいのですが・・・

掲示板などで記事の削除というのを行いたいのですが、 open(Dat,"<data.dat"); print Dat "@data"; close(Dat); ということを行うと コンマでデータの間を区切るとやっていた場合 @dataの中身は 02年06月15日,タイトル,名前,内容\n(半角スペース)02年06月14日,タイトル,名前,内容\n(半角スペース)02年06月13日,タイトル,名前,内容\n という風に間にスペースが入っているようで変なふうになってしまいました。 それは、 02年06月15日,タイトル,名前,内容\n (半角スペース)02年06月14日,タイトル,名前,内容\n (半角スペース)02年06月13日,タイトル,名前,内容\n という風にずれてしまうということです。 どのようにすればこのようなことを解消できるのでしょうか? いいたいことが伝わっていなかったらすいません・・・

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

  • ベストアンサー
  • tfp
  • ベストアンサー率37% (3/8)
回答No.2

@dataをダブルクォートで囲んでるのが原因です。 print Dat @data; と、ダブルクォートを外せば大丈夫です。 配列を文字列中に展開するとき、特殊変数 $" の値(通常、半角スペース)が、配列の要素間に差し込まれ展開されることを覚えておきましょう。

ryo-3
質問者

お礼

ありがとうございました! まさにそのとおりでした! 複雑ですねぇ。""で囲むか囲まないか・・・ もっと勉強が必要ですね・・・ 本当にありがとうございました!

その他の回答 (1)

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

どのタイミングで半角スペースが入ってしまったのかを探る事ですね。 openする前に foreach (@data) { print "$_<BR>"; } 等してスペースが入っていないか? 入っていたら、それよりも前(@dataに文字列を格納する時)等の情報も表示してみる… そうやってデバッグを繰り返していけば、どこに原因があるのかが解りますよ。 原因なんでどうでも良い!今この問題がとりあえず解決できれば!という事であれば、 print Dat "@data"; を foreach $dat (@data) {  $dat =~ s/^ //;  print Dat $dat; } にすれば良いと思います。

ryo-3
質問者

お礼

お返事ありがとうございます。 @dataに限らずの配列の中には (半角スペース)で区切られているようなのです・・・(僕がいろいろデバッグを繰り返した結果ですが・・・) それを open (data,"<data.dat"); print data "@data"; close(data) というように"@data"を書き込んでいたからいけないそうでした・・・ @dataをダブルクォーテーションをはずしたらきれいになりました。 理由が良くわからなかったのですが・・・文字列として扱われているか・・の違いですかね。 本当にお早い返答ありがとうございました。

関連するQ&A