我想从我定义为“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。
这是正确的方法吗?
我是否真的必须将该文件作为字符串读取,然后解析浮点字符串内容以获取浮点值?
答案 0 :(得分:1)
NSData
个对象处理原始字节,而不是字符串。如果您在txt文件中键入字符串,这将无效。如果您使用NSData
个对象,则需要先使用writeToFile:atomically:
等数据对象方法编写数据。
或者,您可以使用NSString函数stringWithContentsOfFile
和componentsSeperatedByString
生成一个NSArray,其中包含每个字符串,如下所示:
NSString *tmp;
NSArray *lines;
lines = [[NSString stringWithContentsOfFile:@"testFileReadLines.txt"]
componentsSeparatedByString:@"\n"];
NSEnumerator *nse = [lines objectEnumerator];
while(tmp = [nse nextObject]) {
NSLog(@"%@", tmp);
}