希望有人能指出我正确的方向,找到如何从一个巨大的xml文件(50k +行)中读取给定的行号?
答案 0 :(得分:1)
由于XML文件中的行通常不具有固定长度,因此无法确定文件中第n行的开始位置。你必须从头开始阅读并计算行数,直到找到你想要的那一行。
如果您要经常访问此文件,您可能想要做的一件事是为该文件构建索引。扫描文件并将每行开头的文件偏移量写入索引文件。由于这些偏移量都具有相同的大小,并且因为每行都有一个偏移量,所以您可以通过从索引文件中读取第n个偏移量来找到数据文件第n行的偏移量。
答案 1 :(得分:0)
我是这样做的:
我首先将文件加载到内存中(50k +行很大,但可能):
// Load file as single string.
// NSISOLatin1StringEncoding works most of the time.
// Use other encoding if necessary.
NSStringEncoding encoding = NSISOLatin1StringEncoding;
NSError *error = nil;
NSString *fileAsString = [NSString stringWithContentsOfFile: path
encoding: encoding
error: &error];
if (error != nil)
NSLog(@"%@", error);
然后我用这个列举了这些行:
__block NSUInteger currentLineNum = 1;
[fileAsString enumerateLinesUsingBlock:
^(NSString *line, BOOL *stop)
{
// Handle line here...
currentLineNum++;
}];
通过这种方式,您可以轻松找到包含您要查找的号码的行。
也许有更好的方法,但这有效。