objective-c - 如何使用 Objective-C 从大型文本文件中读取特定行?

标签 objective-c ios cocoa-touch

假设我有这样的文本文件 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 的值和 linescount 以进行验证。

编辑:与 Nathan 的回答相比,按 set 中的字符拆分的好处是您将接受可能分隔换行符的五个 unicode 字符中的任何一个,其中几个字符彼此相邻仅计为一次中断(根据例如 \r\n)。

NSInputStream 可能是如果内存占用是一个问题,你将不得不处理的问题,它只比 C 的 stdio.h fopen/fread/etc 进化得更多,所以你要去必须编写自己的小循环才能完成。

关于objective-c - 如何使用 Objective-C 从大型文本文件中读取特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874984/

相关文章:

带有 IBAction 的 IOS UIButton

ios - CoreBluetooth - didDiscoverPeripheral 从未调用过特定的 serviceUUID,但适用于 nil

ios - 下载 pdf 文件

ios - 检查何时单击 TabBar 项目 - Objective-C

objective-c - if 语句在其条件变量设置之前执行

ios - UIview顶部约束到安全区域,但在viewDidLoad中, View 的Y位置错误

iOS - 我可以自定义由 Apple 托管的应用内购买内容吗?

objective-c - UINavigationController 上未出现后退按钮

iphone - 是否可以配置 UITableView 以允许多重选择?

cocoa-touch - 移动 View 时键盘不会隐藏文本字段