- ベストアンサー
データの削除をしたいのですが・・・
掲示板などで記事の削除というのを行いたいのですが、 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 という風にずれてしまうということです。 どのようにすればこのようなことを解消できるのでしょうか? いいたいことが伝わっていなかったらすいません・・・
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
@dataをダブルクォートで囲んでるのが原因です。 print Dat @data; と、ダブルクォートを外せば大丈夫です。 配列を文字列中に展開するとき、特殊変数 $" の値(通常、半角スペース)が、配列の要素間に差し込まれ展開されることを覚えておきましょう。
その他の回答 (1)
- yuizuian
- ベストアンサー率42% (103/245)
どのタイミングで半角スペースが入ってしまったのかを探る事ですね。 openする前に foreach (@data) { print "$_<BR>"; } 等してスペースが入っていないか? 入っていたら、それよりも前(@dataに文字列を格納する時)等の情報も表示してみる… そうやってデバッグを繰り返していけば、どこに原因があるのかが解りますよ。 原因なんでどうでも良い!今この問題がとりあえず解決できれば!という事であれば、 print Dat "@data"; を foreach $dat (@data) { $dat =~ s/^ //; print Dat $dat; } にすれば良いと思います。
お礼
お返事ありがとうございます。 @dataに限らずの配列の中には (半角スペース)で区切られているようなのです・・・(僕がいろいろデバッグを繰り返した結果ですが・・・) それを open (data,"<data.dat"); print data "@data"; close(data) というように"@data"を書き込んでいたからいけないそうでした・・・ @dataをダブルクォーテーションをはずしたらきれいになりました。 理由が良くわからなかったのですが・・・文字列として扱われているか・・の違いですかね。 本当にお早い返答ありがとうございました。
お礼
ありがとうございました! まさにそのとおりでした! 複雑ですねぇ。""で囲むか囲まないか・・・ もっと勉強が必要ですね・・・ 本当にありがとうございました!