質問

私は非常に大きなテキストファイルを持っています、そして私のiPadプログラムは、たまに単一のデータを置き換える必要があります(newline: ' n')。どうすればこれを効率的に行うことができますか?ファイル全体を一度に書き込むことはオプションではありません。

私はnsfilehandleを調べてきましたが、それは私が望むことをするように見えます。今、私は行Xを見つける方法を理解するのに苦労しており、それを文字列からのデータに置き換えています。それが終わった後、私がする必要があるのは、synchronizefileを呼び出すことだけだと思いますよね?

私はあなたの助けに感謝します!

役に立ちましたか?

解決

ファイル全体を書かなければ、実際にこれを行うことはできません。ラインの最初に探してから、新しいラインを書くことができます。しかし、最初にそのラインのオフセットを見つける必要があります。まだ持っていない場合、これは最初からその行までファイルを読むことを意味します。その後、新しい行を書くことができますが、元の行とまったく同じ長さの場合のみです。それが長くなると、次の行が上書きされます - ファイルにデータを挿入する方法はありません。新しいラインが古いラインよりも短い場合、古い線の端は残ります。同じ長さの要件も注意が必要です。これは、バイトで同じ長さを意味します。一部の文字をエンコードする文字に応じて、他の文字よりも多くのバイトが必要になる場合があります。

あなたが本当にこれを行う必要があり、それをすべてのケースについて機能させる必要がある場合、あなたはそれらの手順を使用する必要があります:

  1. ファイル全体を読んで、興味のあるラインのオフセットを見つける
  2. ラインのオフセットを探します
  3. 新しい行を書いてください
  4. ステップ1で読んだファイルの残りの部分を書き留めます。

このアルゴリズムは、行がどれだけ長くか短いか、エンコードの方法に関係なく機能します。しかし、これはおそらく、ファイル全体を書き出すよりも、特にとにかくメモリに入っている場合よりも高価になるでしょう。

ファイル全体を書き出すことは受け入れられないことを実際に確認しましたか、それともここで時期尚早の最適化を行っていますか?テキストファイルが本当に大きい場合は、SQLiteなどのデータベースを検討するか、コアデータを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top