【问题标题】:Reading float from a custom file从自定义文件中读取浮点数
【发布时间】:2011-08-06 14:23:56
【问题描述】:

我想从我定义的自定义文件“player.geo”中一一读取一些浮点值。

player.geo 是我使用 Xcode 4 创建的文件(“文件”>“新建”菜单中的“空文件”)

我目前正在尝试这样做:

- (id) initWithGeometryFile:(NSString *) nameOfFile
{
    NSFileHandle *geoFile = NULL;

    NSString *geoFilePath = [[NSBundle mainBundle] pathForResource:@"player" ofType:@"geo"];

    geoFile = [NSFileHandle fileHandleForReadingAtPath:geoFilePath];

    if(geoFile == NULL)
    {
        NSLog(@"Failed to open file.");
    }
    else
    {
        NSLog(@"Opening %@ successful", nameOfFile);

        NSMutableData *fileData = [[NSMutableData alloc] initWithData:[geoFile readDataOfLength:4]];

        float firstValue;
        [fileData getBytes:&firstValue length:sizeof(float)];

        NSLog(@"First value in file %@ is %f", nameOfFile, firstValue);
    }

    return self;
}

我没有得到 -64.0 的预期值,而是得到了 0.0。

这是正确的做法吗?

我真的必须将文件作为字符串读取,然后解析字符串内容以获得浮点值吗?

【问题讨论】:

  • 请同时显示您用于将该值写入文件的代码。
  • 我没有使用代码将数据写入文件。我只是手动将数字输入到 Xcode 中的文件中。我右键单击我的“几何”文件夹并转到新建文件,单击 Mac OS X 模板部分下的“其他”选项并选择“空”。然后我开始输入一些数字并保存文件。
  • 啊,是的,那是你的问题。这不会读取看起来像数字的“文本”数据;它将字节本身解释为浮点数据。您应该将其作为文本阅读,然后处理该文本(NSScanner 等)
  • =/ 呸!我害怕它把它当作文本。感谢您的回答并指出我正确的方式(NSScanner)

标签: objective-c floating-point nsfilehandle


【解决方案1】:

NSData 对象处理原始字节,而不是字符串。如果您在 txt 文件中输入字符串,这将不起作用。如果您使用的是NSData 对象,则需要先使用writeToFile:atomically: 等数据对象方法写入数据。

或者,您可以使用 NSString 函数 stringWithContentsOfFilecomponentsSeperatedByString 生成一个 NSArray,其中包含在其自己的行中的每个字符串,如下所示:

NSString *tmp;
NSArray *lines;
lines = [[NSString stringWithContentsOfFile:@"testFileReadLines.txt"] 
                   componentsSeparatedByString:@"\n"];

NSEnumerator *nse = [lines objectEnumerator];
while(tmp = [nse nextObject]) {
    NSLog(@"%@", tmp);
}

【讨论】:

  • 这是我之前发现的一种方法,按分隔符读取字符串。我更喜欢使用 quixoto 建议的 NSScanner,当我可以 scanFloat :D 而不是指定符号时似乎更容易,但这种方式确实适用于那些特殊时期。无论如何感谢这个额外的答案。
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 2021-10-19
  • 2011-02-15
相关资源
最近更新 更多