我想从文本文件中读取整数列表,我只想编写像
这样的代码int temp;
fin>>temp;
但是当我阅读Cocoa文档时,我发现建议NSFileHandle,并且没有像我假设的方法,只有一个相关的方法:
- (NSData *)readDataOfLength:(NSUInteger)length
是否有任何类/方法可以帮助我在Objective C中执行此操作?感谢。
答案 0 :(得分:1)
我想从文本文件中读取整数列表,我只是想 写代码如
int temp;鳍>>温度;
您有很多文件访问选择。如果你想使用C ++风格的访问,你可以,但你自然需要使用适当的C ++文件或流方法打开文件。但是,如果使用Objective-C ++,则可以轻松地将C ++代码混合到Objective-C中。
您还可以使用C标准库文件例程,如fopen(),fread()等。
如果文件来自您的程序以外的其他来源,那么使用C或C ++读取文件通常是一个不错的选择。
但是当我阅读Cocoa文档时,我发现了NSFileHandle,并且 没有像我假设的方法,只有一种相关的方法:
同样,有很多选择。是的,您可以使用NSFileHandle将文件中的字节读取到NSData对象中,然后您可以从数据对象中获取字节范围。但是,更常见的写入和读取数据的方法是使用NSKeyedArchiver和NSKeyedUnarchiver:
NSData *data = [NSData dataWithContentsOfFile:pathToFile];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
int age = [unarchiver decodeIntForKey:@"Age"];
int weight = [unarchiver decodeIntForKey:@"Weight"];
NSString *name = [unarchiver decodeObjectForKey:@"Name"];
但这只是冰山一角。与您所寻找的相比,它似乎有很多代码,但它也可以减少很少的工作量。由于可以存储和读取对象及其关系,因此您可以使用非常少的代码读取对象的复杂图形:
OrgChart *chart = [NSUnarchiver unarchiveObjectWithFile:pathToFile];
另一种选择是使用易于使用的属性列表,但在可以使用的数据类型方面有限。
如果您想详细了解这些主题,请阅读 Archives and Serializations Programming Guide , Property List Programming Guide 和 File System Programming Guide < / em>的
答案 1 :(得分:0)
你可以使用Objective-C ++和iostreams。
您可以使用f I / O函数,如fopen和fscanf。 (可能是我做的。)
Apple提供NSScanner
进行解析,但它只从字符串中读取,而不是从输入流中读取。如果您真的想要使用它,首先您必须将整个文件(或大块)读入NSString(或NSData,然后将其转换为NSString)。
如果你可以要求文本文件是JSON格式,你可以在一个gulp中读取它并使用NSJSONSerialization来解析它。