如何将具有浮点值的数组保存到Mac可读的文本文件中?

时间:2012-08-10 17:34:48

标签: objective-c arrays cocoa save

我想将存储在数组中的浮点值保存到文本文件中,并直接在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
...

3 个答案:

答案 0 :(得分:2)

您编写的程序将对象表示保存为NSNumbers数组,而 您想要/期望的结果是由换行符分隔的文本文件。

要将这些浮点值保存到该格式的文本文件中,您可以这样:

...
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];
...

答案 1 :(得分:1)

您可能希望从中创建一个XML plist,使其具有人类可读性:

[dataArray writeToFile:filePath atomically:YES];

这会创建一个属性列表,这是一个人类可读的XML(除非该文件已存在且它是二进制plist,在这种情况下,新的plist也将是二进制的。)

答案 2 :(得分:1)

您可以先使用componentsJoinedByString:创建内存中的表示形式,然后将该表示形式写入文件,如下所示:

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

这假设项目数量相对较小,因为字符串表示形式完全在内存中创建。

回读并不像写出那么好:首先回读一个字符串,然后使用[fileRep componentsSeparatedByString:@"\n"]将其拆分为组件,然后遍历循环或块中的组件,添加{ {1}}用于拆分的每个元素。