【问题标题】:How to save an array with float values into a text file that is readable by Mac?如何将具有浮点值的数组保存到 Mac 可读的文本文件中?
【发布时间】:2012-08-08 01:06:47
【问题描述】:

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

【问题讨论】:

    标签: objective-c arrays cocoa save


    【解决方案1】:

    您编写的程序将对象表示保存为 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];
    ...
    

    【讨论】:

      【解决方案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]]对于拆分的每个元素。

      【讨论】:

        【解决方案3】:

        您可能希望从中创建一个 XML plist 以使其易于阅读:

        [dataArray writeToFile:filePath atomically:YES];
        

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

        【讨论】:

        • 我想这种方法必须比使用字符串更快。但是,如果我在 iPhone 上测试一个程序,同时它通过电缆连接到 Mac,我可以以某种方式将 XML 文件保存在 Mac 上吗?
        • 好吧,这不是最舒适但绝对有效的解决方案。谢谢。
        猜你喜欢
        • 1970-01-01
        • 2021-10-13
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多