Reading Specific Part Of A Text File

烂漫一生 提交于 2019-12-24 19:33:58

问题


I've found a few similar questions to this but not relating to XCode.

I am creating an app where clicking a button generates a randomised quote and displays it in a label.

What I'd like to do is have a text file with all of the quotes, then have my app randomly select a quote from that file.

The problem is that my code at present reads the entire contents of the file.

    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];

The only other way I can think of doing it is to have an arc4random() code that randomises which file it locates, with each file containing a single quote...but as I want to have over a hundred quotes, this seems less than ideal.

Any suggestions as to how to read a particular line of a text file?

Thanks heaps in advance!


回答1:


You could read the whole file into an NSString, then split it into an array with componentsSeparatedByString:@"\n", keep that it memory, and return a random element of the array when needed. If there are just hundreds (and not, say, millions) of lines, the additional memory used should not be an issue.




回答2:


You're imitating the behavior of the old fortune program, so adopt its tactic, too. The database of quotes is a set of files with quotes separated by lines containing only a special character:

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

For each of those quote files, a companion file is generated (using the strfile utility) that stores the offset and length of each quote. To pick a quote, you load just the (relatively small) index file into memory, choose an element at random, then use that offset and length to seek and read a single quote from the appropriate quote file.

Here's a Python implementation of fortune on GitHub. The original C code should be floating around somewhere too.



来源:https://stackoverflow.com/questions/20016402/reading-specific-part-of-a-text-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!