New menu)" />
开发者

Reading float from a custom file

开发者 https://www.devze.com 2023-03-26 03:43 出处:网络
I want to read some float value one by one from a custom file I defined \"player.geo\". player.geo is a file I created using Xcode 4 (\"Empty File\" from the File > New menu)

I want to read some float value one by one from a custom file I defined "player.geo".

player.geo is a file I created using Xcode 4 ("Empty File" from the File > New menu)

I'm currently trying to do it like this:

- (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;
}

I'm not getting the expected value of -64.0, rather I'm getting 0.0.

Is this the right way to go about it?

Do I really have to read the file as a string and then parse float the string c开发者_如何学Pythonontents to get the float value?


NSData objects deal with raw bytes, not strings. If you are typing in a string into a txt file, this will not work. If you are using NSData objects, then you will need to first write the data using the data object methods such as writeToFile:atomically:.

Alternately, you can use the NSString functions stringWithContentsOfFile and componentsSeperatedByString to generate an NSArray containing each string on it's own line, like so:

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

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

精彩评论

暂无评论...
验证码 换一张
取 消