1

配列に格納されているfloat値をテキストファイルに保存し、Macでファイルを直接読み取りたい。これが私が配列を作成する方法です:

dataArray = [[NSMutableArray alloc] init];
NSNumber *numObj = [NSNumber numberWithFloat:3.14];
[dataArray insertObject:numObj atIndex:0];
NSNumber *numObj = [NSNumber numberWithFloat:2.3];
[dataArray insertObject:numObj atIndex:1];
...

これが私が配列を保存する方法です:

NSData *savedData = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
NSString *filePath = @"/Users/smith/Desktop/dataArray.txt";
[savedData writeToFile:filePath options:NSDataWritingAtomic error:nil];

ファイルを開くと、内容が文字化けしているだけです。代わりに、次のようにします。

3.14
2.3
1.4
...
4

3 に答える 3

3

作成したプログラムは、オブジェクト表現をNSNumbersの配列として保存しますが、必要な/期待する結果は、改行で区切られたテキストファイルです。

これらのfloat値をその形式のテキストファイルに保存するには、次のようにします。

...
NSMutableString * string = [NSMutableString new];
[string appendFormat:@"%f\n", 3.14];
[string appendFormat:@"%f\n", 2.3];

NSError * error = nil;
BOOL written = [string writeToURL:url atomically:YES encoding:someEncoding error:&error];
...
于 2012-08-10T17:48:31.653 に答える
2

を使用componentsJoinedByString:して、最初にメモリ内表現を作成してから、次のようにその表現をファイルに書き込むことができます。

NSString *fileRep = [dataArray componentsJoinedByString:@"\n"];
NSString *filePath = @"/Users/smith/Desktop/dataArray.txt";
[fileRep writeToFile:filePath options:NSDataWritingAtomic error:nil];

これは、文字列表現が完全にメモリ内に作成されるため、アイテムの数が比較的少ないことを前提としています。

ただし、読み戻すことは書き出すことほど良くありません。文字列を読み戻すことから始め、それをを使用してコンポーネントに分割し[fileRep componentsSeparatedByString:@"\n"]、次にループ内またはブロックを使用してコンポーネントを調べ、分割[NSNumber numberWithDouble:[element doubleValue]]の各要素を追加します。

于 2012-08-10T17:48:39.050 に答える
1

人間が読める形式にするために、そこからXMLplistを作成することをお勧めします。

[dataArray writeToFile:filePath atomically:YES];

これにより、人間が読めるXMLであるプロパティリストが作成されます(ファイルがすでに存在し、バイナリplistである場合を除きます。この場合、新しいplistもバイナリになります)。

于 2012-08-10T17:37:21.870 に答える