• ベストアンサー

配列データの書換え

お世話になっております。 タイトルにある「配列データの書換え」ですが、あるデータ用ファイル(data.txt)というのがあり、 2009-07-07 ○○@○○.com たけし no 2009-07-07 △△@○△.net ゆみこ no 2009-07-08 ○△@□○.org ひろし ok ※全角スペースの箇所は、タブ区切りとなっています。 と構成されているファイルを呼び出し、条件にて処理を行いたく、呼び出したデータ(data.txtのデータ)を配列にし、 for($i;$i<count($datafile);$i++){  $data = explode("\t", $datafile[$i]);   if($data[3] == "ok"){//ok,noだけではなく、他の条件も含めて条件処理を行っている    $str = "no";    $up_data[] = $data[0]."\t".$data[1]."\t".$data[2]."\t".$str;   } } とこんな感じで記述してみました。 これは、if文の中で条件が合致していたら、名前の後(data.txt)にある「no」を「ok」とし、 その書換えたデータをもとに、data.txtをも上書きしたいと考えているのですが、 この方法だと、data.txtのデータが増えて来たとき、効率が悪いように思えてなりません。 上記のような流れの処理を行い、元のファイルのデータを処理&上書きするもっと効率のよい スクリプトはどんな感じになるのでしょうか。 上手く説明できずに、また説明が不十分なところがあり恐縮ですが、アドバイスのほど頂戴出来れば幸いです、 宜しくお願いいたします。

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

  • ベストアンサー
noname#90314
noname#90314
回答No.1

データファイルを読み取っていくという点では あまり速度的に変わらないと思いますが かならず 行末データが ok, ng であるならば 正規表現で置換してしまうのもありではないかと思います。 a4_chapp 様の環境においてデータベースが許されない環境のため上記質問がでているとしたら余計なことかもしれませんが ただ懸念されていますとおりデータファイルの肥大化については 最終的にはデータベースに移行するのが最良の策に思えます。

a4_chapp
質問者

お礼

こんにちは。 ご親切なアドバイスをありがとう御座います。 また、こちらからのご挨拶が遅れてしまったことをお許し下さい。 >正規表現で置換してしまうのもありではないかと思います。 正規表現で置換ですか・・。色々なやり方があるのですね。 勉強になります。 >最終的にはデータベースに移行するのが最良の策に思えます。 やはりそうですね。今回の処理を考えている中、やはりDBの利用が望ましい事に改めて気付きました。

その他の回答 (1)

  • tk_uc
  • ベストアンサー率68% (33/48)
回答No.2

ある程度のデータ量が見込まれるなら、No.1の方のがおっしゃるようにDBを使用すべきです。 MySQLなどが使用できない環境でもSQLiteなら使えるのではないでしょうか。 テキストファイルへデータを保管する代わりにSQLiteで保管。 制限はあるもののSQL文が使えますので、非常に効率よく大量データを扱えます。

a4_chapp
質問者

お礼

こんばんは。ご親切なアドバイスをありがとうございます。 最近になってはじめてSQLiteを触りましたが、仰るようにMySQLが利用できない時など利用価値はありそうですね。 色々な理由があってファイルにデータを書き込む方式をとっているのですが、なんとかスクリプトの構成を変えたりして当初のときより、負荷の軽減ができたようです。ご親切なアドバイスをありがとうございます。

関連するQ&A