• ベストアンサー

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

掲示板などで記事の削除というのを行いたいのですが、 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 という風にずれてしまうということです。 どのようにすればこのようなことを解消できるのでしょうか? いいたいことが伝わっていなかったらすいません・・・

  • ryo-3
  • お礼率64% (146/226)
  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • textareaに入力されたデータを読み込む

    例えば以下のようにtextarea内にデータが入力されているとします(カンマ区切り,スペース区切り,タブ区切りなどはなんでも良いのですが)。 +---ここから---+ 1 2 3 4 5 6 7 8 9 10 11 12 +---ここまで---+ これらのデータを配列に格納する方法が,だいぶネットサーフィンしていたのですが分かりません。 以降,Perlになってしまうのですが,1行ずつ配列にdat=(1,2,3,4)のように格納していくか,あるいは行列(2次配列)の形で格納したいのです。 $pathname="D://datafile.dat"; open MYFILE, "$pathname"; while (<MYFILE>) { chomp; @{"dat$."} = split /,/; } close MYFILE; +----------- $pathname="D://datafile.dat"; open MYFILE, "$pathname"; @dat = map {chomp;[split /,/]} <MYFILE>; close MYFILE;

  • 重複データの削除方法

    data.datのログ形式 先頭、最後は半角カンマ  fgetcsv でdata.datを1行単位で読み込み ,a.hoge@hoge.com, ,ba.hoge@hoge.com, ,c.hoge@hoge.com, ,a.hoge@hoge.com, ,b.hoge@hoge.com, ,c.hoge@hoge.com, 重複した行の1行を削除して詰めてdata.datを上書きする方法の簡単な方法をお願いします。 参考になるようなサンプルコードを書いていただけるとありがたいですが、自力で勉強もしたいので、ヒントや参考サイトがあれば教えて下さい。

    • 締切済み
    • PHP
  • EXCELの「折り返して全体を表示する」について

    EXCELです。 日本人名をローマ字で入れて、折り返して全体を表示する設定をしています。 姓と名の間にカンマと半角スペースを入れると、カンマの位置で折り返されてキレイに2段で表示されるのですが、半角スペースを入れないと、セルの幅で文字を折り返してしまいます。 半角スペースを入れずに折り返させることは出来ないのでしょうか。 【名前の例】 kintarou,ooki 【半角スペース有り】 kintarou, ooki 【半角スペース無し】 kintarou,oo ki

  • ファイルのデータの半角スペースが削除できない

    プログラム(1)--------------------------------------------------- @youbi = ('日', '月', '火', '水', '木', '金', '土'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; open(TIME,">ファイル名"); print TIME "${year}\n"; print TIME "${mon}\n"; ---省略--- close(TIME); プログラム(2)--------------------------------------------------- open(TIME,"ファイル名"); flock(TIME,1); @time=<TIME>; close(TIME); ------------------------------------------------------------- 以上のようなプログラムを使い時間を取得したのですが。 printしてみると、「2007 8 24」のように半角スペースが入ってしまいます。chomp();も試してみたのですが、どうにも削除できません。 どうやれば、半角スペースを削除出来るのでしょうか?もしくは、どうやれば半角スペースが入らないように保存、展開できるのでしょうか? 分かり難い質問かとは思いますが、ご返事お願い申し上げます。

    • ベストアンサー
    • Perl
  • テキストファイルの文字列操作

    改行やカンマで区切られていないテキストファイルがあります。(「-」は半角スペースと見てください。) 11111-----aaaaaaaa--22222222--55555555-- 44444444--・・・・ といったように、スペースを含む10バイトが1つのデータとなっています。最初の10バイトのデータは必ず内5バイトがスペース、そのあとのデータは2バイトがスペースという決まりがあり、かなりのデータ量があります。 これを 11111 aaaaaaaa 22222222 55555555 44444444 というふうにスペースは除き改行したいのです。 スペースの数が一定ではないので、置換できません。VBAなどでいい方法はありますか?

  • ほしいデータの文字列の抽出がわかりません・・・

    たびたび質問して申し訳ありません・・・ PHPであるファイル(jyusho.txt)内容を読み込むとします。 ファイル内容は名前、住所、生年月日、出身地となります。 ---------------------------------------------------------------- 北島三郎△"東京都八王子市山奥1丁目"△19000101△アメリカ 五木ひろし△"広島県尾道市坂上5丁目△五木ビル△1101号室"△19000101△広島 かんだうの△"東京都渋谷区代官山1丁目△デリシャスビル101"△19000101△東京 <省略> 北島三郎△"東京都八王子市山奥1丁目"△19000101△アメリカ <省略> バリー・ボンズ△"東京都武蔵村山4丁目△都営ビル201号室"△富山 --------------------------------------------------------------- 上記のようなデータ(レコード)がテキストファイルに入っているとします。 このデータを連想配列に格納しようと考えています。 それぞれ、名前、住所、生年月日、出身地を格納したいのですが、 それぞれのデータの間は△(半角スペース)で区切ってあります。 住所は""で囲まれた情報が住所ですが、住所の中には △(半角スペース)が格納されていますが、これはデータの区切りでは ありません。 また上記の場合は、さぶちゃんが2回でてきました。 こういう風に同じデータが複数でた場合は、 すべての情報(名前、住所、生年月日、出身地のデータ)がすべて合致した 場合は連想配列には格納しないことにしたいです。 このような情報を連想配列に格納する場合、 どのようにすればいいのでしょう? 色々考えたのですが思いつきません。 住所の△(半角スペース)がなければ・・・・ ながなが書いてしまいましたが、どうかよろしくお願いいたします。

    • 締切済み
    • PHP
  • データの前ゼロを削除したい

    いつも楽しく勉強させていただいております。 Win7でSQLServer2008R2の環境です。 CSV形式のファイルをSQLServerにインポートした後で集計を行います。 問題はキーとなる列に前ゼロが入っている行と入っていない行があることです。 つまり、100と000100と0100は同じキー(100)として集計したい。 これを実現するにはどうしたらよいでしょうか。 SQL文で対処できますか。 それともデータベースに取り込む前のCSV形式のファイルの段階でVBなどのプログラムによって書き換えてしまったほうがいいですか。 trim関数はスペースなら削除できるようですが、0には使えないですよね。 キーとなる値の桁数の最長は不明なので、0埋めは使えません。 また間にハイフン(-)を含むことがあるので、数値型に変換するというのもできません。 もう一つ質問です。 データベースを使う際、データの加工はデータベース内で行うのとデータベース取り込み前に行うのと2通りあると思います。 どんな時はデータベース内で行い、どんな時は取り込み前に行うべきでしょう。 ちょっと質問の内容が漠然としていて申し訳ありません。 たとえばデータの内容が全角半角が混在しているのを半角に統一するというのは、どちらでやってもできますよね。 基本的にはCSVファイルのイメージをそのままデータベースに取り込み、加工はデータベースの機能を使いたいのです。 集計前のデータの加工において、 「こういうことはデータベースではできないよ」という例を幾つでも教えてください。 逆に「こういうことはデータベースでないとできないよ」というのも。

  • データファイルの修正

    掲示板を運営している者です。 ログを保存する際に、カンマ区切りで mid0001,2004年01月30日,タイトル1,本文1\r\n mid0002,2004年02月02日,タイトル2,本文2\r\n といったような感じでpush関数で追加しているのですが、 あるとき、次の行と前の行がくっついてしまうトラブルがありました。 foreachでスキャンしていっても、くっついてしまった行を認識してもらず困っています。 下記のこと教えてください。 [1]どのようなときに次の行と前の行がくっついてしまうトラブルが起こるのでしょうか? [2]行の末尾は「\r\n」よりも良いものはありますか? [3]根本的にデータの保存の仕方で注意すべきことなどを教えてください。 [4]一度このようなトラブルになったデータはスクリプト(置換など)で修正できますか? [5]修正できるとすればどのようにやればよいでしょうか? 足りない文章は補足させていただきます。 また、根本的に質問の観点が間違っていましたら どうぞご指摘くださいませ。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Accessでの全データから空白削除

    Access2003で、各データの数値の前後に存在する空白を全て削除したいと考えています(データ型はテキスト型)。 空白は半角スペースですが、1個~6個の幅があります。 例:" 111"、" 11 "、" 1111 "など 間に空白は入っていません。 シンプルに置換機能で検索できれば手っ取り早いのですが、データ件数が多いからか(40万件、60万件、80万件)、挙動が安定しません。 エラーが出て削除できなかったり、出来ているように見えてあるところから全く削除出来ていなかったりという状態です。 Trim関数あたりを使ってマクロでなんとかできるのかな、という想像はつくのですが、Howが全く分かりません。マクロ素人です。 よろしくお願いします。

  • Excelでカンマ区切りの文字列をセルに分割する?

     住所録をExcelにコピーしたら、 カンマ区切りに一つのセルに入ってしまいました。 ◇カンマごとに一つのセルに分割して文字列を分ける。 ◇氏と名の間は半角スペースでカンマでは有りませんが、   二つのセルに分ける。 上記について分ける関数を教えてください。