你如何从objective-c中的文件中读取特定的行号?

时间:2011-07-17 00:01:42

标签: iphone objective-c ios

希望有人能指出我正确的方向,找到如何从一个巨大的xml文件(50k +行)中读取给定的行号?

2 个答案:

答案 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++;
    }];

通过这种方式,您可以轻松找到包含您要查找的号码的行。

也许有更好的方法,但这有效。