1

テキストファイルから整数のリストを読みたいのですが、次のようなコードを書きたいだけです

int temp;
fin>>temp;

しかし、Cocoa のドキュメントを読んだところ、NSFileHandleが提案されていることがわかりました。想定していたような方法はなく、関連する方法は 1 つだけです。

- (NSData *)readDataOfLength:(NSUInteger)length

Objective Cでこれを行うのに役立つクラス/メソッドはありますか? ありがとう。

4

2 に答える 2

1

テキストファイルから整数のリストを読みたいのですが、次のようなコードを書きたいだけです

中間温度; フィン>>温度;

ファイル アクセスには多くの選択肢があります。C++ スタイルのアクセスを使用したい場合は可能ですが、当然、適切な C++ ファイルまたはストリーム メソッドを使用してファイルを開く必要があります。ただし、Objective-C++ を使用する場合は、C++ コードを Objective-C に簡単に混在させることができます。

fopen()、fread() などの C 標準ライブラリ ファイル ルーチンを使用することもできます。

C または C++ を使用してファイルを読み取ることは、ファイルが自分のプログラム以外のソースから来ている場合 (自分では制御できないもの) に適していることがよくあります。

しかし、Cocoa のドキュメントを読んだとき、NSFileHandle が提案されていることがわかりました。想定したような方法はなく、関連する方法は 1 つだけです。

繰り返しますが、多くの選択肢があります。はい、NSFileHandle を使用して、ファイルから NSData オブジェクトにバイトを読み取ってから、データ オブジェクトからバイトの範囲を取得できます。ただし、データを読み書きするためのより一般的な方法は、NSKeyedArchiver と NSKeyedUnarchiver を使用することです。

NSData *data = [NSData dataWithContentsOfFile:pathToFile];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
int age = [unarchiver decodeIntForKey:@"Age"];
int weight = [unarchiver decodeIntForKey:@"Weight"];
NSString *name = [unarchiver decodeObjectForKey:@"Name"];

ただし、これは氷山の一角にすぎません。探していたものに比べてコードが多いように見えますが、作業が大幅に少なくなる場合もあります。オブジェクトとその関係は格納および読み取りが可能なため、オブジェクトの複雑なグラフをわずかなコードで読み取ることができます。

OrgChart *chart = [NSUnarchiver unarchiveObjectWithFile:pathToFile];

もう 1 つのオプションは、プロパティ リストを使用することです。これは非常に使いやすいですが、使用できるデータ型が制限されています。

これらのトピックについて詳しく知りたい場合は、Archives and Serializations Programming GuideProperty List Programming Guide、およびFile System Programming Guideをお読みください。

于 2011-11-12T06:28:54.173 に答える
0

慣れているように、Objective-C++ と iostream を使用できます。

fopen や fscanf などの CI/O 関数を使用できます。(おそらく私がしたいこと。)

Apple はNSScanner解析を提供していますが、入力ストリームからではなく、文字列から読み取るだけです。本当に使用したい場合は、最初にファイル全体 (または大きなチャンク) を NSString (または NSData) に読み込んでから、それを NSString に変換する必要があります。

テキスト ファイルを JSON 形式にする必要がある場合は、一気に読み込んで NSJSONSerialization を使用して解析できます。

于 2011-11-12T06:20:01.803 に答える