0

プログラムのデータが格納された大きなテキスト ファイルがあります。これは基本的に、各行に 1 つの浮動小数点数で構成される CSV ファイルです。例:

6.3580820e+03
6.3589883e+03
6.3592695e+03
6.3592695e+03
6.3635508e+03
6.3695820e+03

ファイルを 1 行ずつ読み取る方法は知っていますが、メモリ内のすべてのデータを含む配列になってしまいます。readFromLine:32 のような別の行にアクセスしたいのですが、ファイル全体を一度読み込んだり読み込んだりせずにそれを行う方法はありますか? そうでない場合、どのようにデータを変換すればよいですか? SQLite?

4

1 に答える 1

0

readFromLine:32 のような個別の行にアクセスしたいのですが、ファイル全体を一度ロードまたは読み取りせずにそれを行う方法はありますか?

を使用NSInputStreamしてファイルを読み取ることができます。入力ストリームは、必要に応じてファイルの一部をメモリに読み取ることを管理します。

そうでない場合、どのようにデータを変換すればよいですか? SQLite?

少なくともアプリケーションにとって、CSV ファイルの問題は、特定の行がどこにあるかを知る唯一の方法は、ファイルを最初から読み取って行を数えることです。各行、または 10 行目または 100 行ごとなど、ファイルの先頭からのオフセットを示すインデックスがある場合は、その行 (または直前の行) の位置を調べることができます。インデックスを作成し、インデックス エントリで示されるオフセットからデータ ファイルの読み取りを開始します。SQLite のようなデータベース形式を使用することも、別の優れた戦略です。大きなファイルを小さな断片に分割することもできます。これにより、ファイルの関連部分だけをロードしても、リソースをあまり消費しなくなります。

于 2013-03-02T19:10:03.690 に答える