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

Iphone 如何从objective-c中的文件中读取特定行号?,iphone,objective-c,ios,Iphone,Objective C,Ios,希望有人能为我指出正确的方向,找到如何从一个巨大的xml文件(50k+行)中读取给定的行号?由于xml文件中的行通常没有固定的长度,因此无法预测文件中第n行的起始位置。你必须从头开始阅读,数数行,直到找到你想要的那一行 如果要经常访问此文件,可能需要做的一件事是为该文件建立索引。扫描文件并将每行开头的文件偏移量写入索引文件。由于这些偏移量都具有相同的大小,并且每行都有一个偏移量,因此可以通过从索引文件读取第n个偏移量来找到数据文件第n行的偏移量。我是这样做的: 我首先将文件加载到内存中(50k+

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

由于xml文件中的行通常没有固定的长度,因此无法预测文件中第n行的起始位置。你必须从头开始阅读,数数行,直到找到你想要的那一行

如果要经常访问此文件,可能需要做的一件事是为该文件建立索引。扫描文件并将每行开头的文件偏移量写入索引文件。由于这些偏移量都具有相同的大小,并且每行都有一个偏移量,因此可以通过从索引文件读取第n个偏移量来找到数据文件第n行的偏移量。

我是这样做的:

我首先将文件加载到内存中(50k+行很大,但可能):

然后,我使用以下方法列举了行:

__block NSUInteger currentLineNum = 1;

[fileAsString enumerateLinesUsingBlock:
    ^(NSString *line, BOOL *stop) 
    {

        // Handle line here...

        currentLineNum++;
    }];
这样你就可以很容易地找到你要找的号码


也许有更好的方法,但这是可行的

也许更多的信息会有帮助,你是否匹配一个模式一个重复的12行模式,但每一行的长度不同(有些非常长)。实现了DDFileReader逐行读卡器,但iPhone需要将近90秒的时间来解析和查找我要查找的信息。我已经创建了一个索引文件,提供了行号——但不太确定如何获取这些行号……谢谢Caleb——我确实确认了我的做法是正确的。我基本上创建了一个索引文件,通过缓慢地迭代我的主文件,并吐出偏移量开始和结束。我将开始和结束保存在索引中(而不是行号)。现在,我只是像这样使用NSFileHandle:[fileHandle seekToFileOffset:offsetStart];NSString*kmlChunk=[[NSString alloc]initWithData:[fileHandle readDataOfLength:(offsetEnd offsetStart)]编码:NSUTF8StringEncoding];
__block NSUInteger currentLineNum = 1;

[fileAsString enumerateLinesUsingBlock:
    ^(NSString *line, BOOL *stop) 
    {

        // Handle line here...

        currentLineNum++;
    }];