阅读文本文件的特定部分

时间:2013-11-16 08:28:53

标签: ios cocoa-touch file

我发现了一些类似的问题但与XCode无关。

我正在创建一个应用程序,单击按钮会生成随机引用并将其显示在标签中。

我想要做的是有一个包含所有引号的文本文件,然后让我的应用程序随机选择该文件的引用。

问题是我目前的代码读取了文件的全部内容。

    textHIYP = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
textHIYP.editable = NO;
[self.view addSubview:textHIYP];

textHIYP.text = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Quotes" ofType:@"txt"] encoding:NSUTF8StringEncoding error:nil];

我能想到的唯一另一种方法是使用arc4random()代码随机化它找到的文件,每个文件包含一个引号......但是因为我想要有超过一百个引号,这个似乎不太理想。

有关如何阅读文本文件的特定行的任何建议吗?

提前感谢大家!

2 个答案:

答案 0 :(得分:1)

您可以将整个文件读入NSString,然后将其拆分为带componentsSeparatedByString:@"\n"的数组,保留内存,并在需要时返回数组的随机元素。如果只有数百(而不是数百万)行,那么使用的额外内存应该不是问题。

答案 1 :(得分:0)

你正在模仿旧fortune程序的行为,所以也采用它的策略。引号数据库是一组文件,引号用仅包含特殊字符的行分隔:

Cabbage crates coming over the briny!
%
Top hole, squiffy!
%
Next we have number four, ”crunchy frog“.
%
Lemon curry?
%

对于每个引用文件,将生成一个伴随文件(使用strfile实用程序),该文件存储每个引用的偏移量和长度。要选择引用,只需将(相对较小的)索引文件加载到内存中,随机选择一个元素,然后使用该偏移量和长度从相应的引用文件中查找和读取单引号。

这是GitHub上的Python implementation of fortune。原始的C代码也应该在某个地方浮动。