假设我有这样的文本文件 my.txt
this is line 1
this is line 2
....
this is line 999999
this is line 1000000
在 Unix 中,我可以通过发出像“head -1000 my.txt | tail -1”这样的命令来获取“this is line 1000”这一行。在Objective-C中对应的获取方式是什么?
最佳答案
如果一次将所有内容都存储在内存中并不太低效,那么最紧凑的调用序列(我已将其扩展到多行以进行更简单的说明)将是:
NSError *error = nil;
NSString *sourceString = [NSString stringWithContentsOfFile:@"..."
encoding:NSUTF8StringEncoding error:&error];
NSArray *lines = [sourceString componentsSeparatedByCharactersInSet:
[NSCharacterSet newlineCharacterSet]];
NSString *relevantLine = [lines objectAtIndex:1000];
您应该检查 error
的值和 lines
的 count
以进行验证。
编辑:与 Nathan 的回答相比,按 set 中的字符拆分的好处是您将接受可能分隔换行符的五个 unicode 字符中的任何一个,其中几个字符彼此相邻仅计为一次中断(根据例如 \r\n
)。
NSInputStream
可能是如果内存占用是一个问题,你将不得不处理的问题,它只比 C 的 stdio.h fopen/fread/etc 进化得更多,所以你要去必须编写自己的小循环才能完成。
关于objective-c - 如何使用 Objective-C 从大型文本文件中读取特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874984/