4

この同様のトピックについてはかなりの数のスレッドがありますが、私の問題に対する解決策を完全に理解することはできませんでした.

私がやりたいことは非常に簡単です。データが次のように保存されたフラットファイルデータベースがあります-

$username:$worldLocation:$resources

問題は、php を使用した用語の検索に基づいてこの行を更新する送信データ html ページが必要なことです。

search db for - $worldLocation

if $worldLocation found

replace entire line with $username:$worldLocation:$updatedResources

これを行うにはかなり簡単な方法があるはずですが、現時点ではそれを理解できません。この投稿がアップされているので、引き続き試してみますが、使用できる方法を知っていれば、助けていただければ幸いです.

ありがとうございました

4

5 に答える 5

1

私はずっと c と、c から php に組み込まれた関数が大好きでした。

チェックアウトしfscanffprintf.

これらは、形式で書かれたものを読んでいる間、あなたの人生を楽にします. 言うように:

$filehandle = fopen("file.txt", "c");
while($values = fscanf($filehandle, "%s\t%s\t%s\n")){
    list($a, $b, $c) = $values;
    // do something with a,b,c
}

また、回避するためのパフォーマンス上の回避策はありませんreading the entire file into memory -> changing one line -> writing the entire file。あなたがしなければならない。

これは可能な限り効率的です。これらの場合、phpがcの関数をラップするだけの場所をいくつか読んだので、おそらくネイティブのcコードを使用しているからです。

于 2012-10-04T18:48:35.943 に答える
0

フラットファイルにコミットしている場合、最も簡単なことは、各行を繰り返し、新しいファイルを作成し、一致するファイルを変更することです。

ええ、それはひどいです。

「適切な」データベースに切り替えることを強くお勧めします。サーバーを実行する際のリソースや複雑さが気になる場合は、SQLite または Berkeley DB を調べることができます。これらはどちらも「単なるファイル」であるデータベースを使用し、DB サーバーのインストールと維持の問題を取り除きますが、個々のレコードをすばやく簡単に検索、置換、および削除することができます。他の理由でフラット ファイルが必要な場合は、いくつかのインポート/エクスポート ルーチンを簡単に作成できます。

もう 1 つの興味深い可能性は、創造性を発揮したい場合、ファイルシステムをデータベースとして見ることです。各ユーザーにディレクトリを付与します。各ディレクトリには、場所のファイルがあります。各ファイルで、リソースを更新します。つまり、行を挿入するには、新しいファイルに書き込むだけです。ファイルを更新するには、1 つのファイルを書き換えるだけです。ユーザーの削除は、ディレクトリを削除するだけです。確かに、全体をメモリに丸呑みすることには、もう少しオーバーヘッドがあります。

ファイルの末尾への追加は簡単な操作であるため、問題を解決する他の方法として、フラット ファイルを書き込み専用にすることが考えられます。次に、フラット ファイルを読み取るときに無視する必要がある「無効な」行番号をリストする 2 番目のファイルを作成します。同様に、既存の行を簡単に "X" アウトして (同じ長さではない可能性のあるファイル内の行を更新しようとするよりもはるかに簡単です)、新しいデータを最後に追加することができます。

2 番目の 2 つのアイデアは、問題を解決する方法が常に複数あることを示すためのものであり、実用的な解決策を意図したものではありません。

于 2012-10-04T19:12:21.037 に答える
0
  1. あなたは難しい方法が好きなので、それでいいのです....
  2. 各線を同じ長さにします。空白を埋めるために、スペース、タブ、大文字の X などを追加します
  3. 行を置き換えたい場合は、それを見つけて、各行が固定長であるため、それを置き換えることができます。
  4. スピードと手間を省くために、データベースを使用します(SQLLiteでも)
于 2012-10-04T18:30:41.817 に答える
-1

それがあなたの場所ですか:

update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';
于 2012-10-04T18:25:58.480 に答える