从自定义文件中读取浮点数

时间:2011-08-06 14:23:56

标签: objective-c floating-point nsfilehandle

我想从我定义为“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。

这是正确的方法吗?

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

1 个答案:

答案 0 :(得分: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);
}