[解決済み] Objective-C。ファイルを一行ずつ読む
質問
Objective-Cで大きなテキストファイルを扱うには、どのような方法が適切でしょうか。例えば、各行を別々に読む必要があり、各行をNSStringとして扱いたいとします。これを行うための最も効率的な方法は何ですか?
1つの解決策は、NSStringメソッドを使用することです。
+ (id)stringWithContentsOfFile:(NSString *)path
encoding:(NSStringEncoding)enc
error:(NSError **)error
という配列を作って、改行区切りで行を分割し、その配列の要素に対して反復処理を行います。しかし、これはかなり非効率的なようです。ファイルをストリームとして扱い、一度にすべてを読み込むのではなく、各行を列挙する簡単な方法はないのでしょうか?Java の java.io.BufferedReader のようなものです。
どのように解決するのですか?
いい質問ですね。私が思うに @Diederik は良い答えを持っていると思います。しかし、Cocoa がまさにあなたがやりたいことのためのメカニズムを持っていないのは残念です。
NSInputStream
は,N バイトのチャンクを読み取ることができます (これは
java.io.BufferedReader
と非常によく似ています)、しかし、あなたはそれを
NSString
に変換し、改行 (あるいは他の区切り文字) をスキャンして残りの文字を次の読み込みのために保存するか、改行がまだ読み込まれていない場合はさらに文字を読み込む必要があります。(
NSFileHandle
を読むことができます。
NSData
に変換し、それを
NSString
に変換することができますが、基本的には同じ処理です)。
アップルは
ストリーム プログラミング ガイド
があり、詳細を説明するのに役立ちます。
このSOの質問
を処理する場合にも役立つかもしれません。
uint8_t*
バッファを扱うのであれば、役に立つかもしれません。
このような文字列を頻繁に読み込むのであれば(特にプログラムの別の部分で)、この動作を詳細を処理できるクラスでカプセル化するのが良いでしょうし、サブクラスで
NSInputStream
(それは
はサブクラス化されるように設計されています
のサブクラスとして設計されています)、正確に読み取ることができるメソッドを追加しています。
念のために言っておきますが、これは追加すべき素晴らしい機能だと思いますし、これを可能にする何かのために強化要求を提出するつもりです :-)
編集します。 この要求はすでに存在することが判明しました。このための 2006 年の Radar があります (Apple 内部の人は rdar://4742914)。
関連
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] Objective-Cの定数
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み] ファイルに行を書き込む正しい方法?
-
[解決済み] Javaでプレーンテキストファイルを読み込む
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
[解決済み] デバイス用にコンパイルするとApple Mach-Oのリンカーエラーが発生する。
-
[解決済み] Xcodeでコンソールに何かを印刷するには?
-
[解決済み] Objective-Cで、オブジェクトの種類をテストするにはどうしたらいいですか?
-
[解決済み] Xcode 4でNSZombieEnabledを設定するにはどうすればよいですか?
-
[解決済み] メソッド名と行番号を出力し、NSLogを条件付きで無効にする方法は?
-
[解決済み】UITableViewControllerを使用しないUIRefreshControl
-
[解決済み】idの代わりにinstancetypeを使い始めるのは有益でしょうか?
-
[解決済み】Objective-Cでクラスレベルのプロパティを宣言するにはどうすればいいですか?
-
[解決済み】ストーリーボードで、複数のコントローラで使用するためのカスタムセルを作成する方法は?