使用分隔符nsstring读取文本文件

时间:2011-04-26 15:10:17

标签: iphone

我有一个像这样的文本文件

问题1 问题2 问题3

我想只读第一行到nsstring

之后我想标记第一行,所以下次,跳过第一行,但我不知道该怎么做,我有这个代码供阅读,但只给我第三行

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"qa" ofType:@"txt"];  

NSString *myText = [NSString  stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];   
NSArray *lines = [myText componentsSeparatedByString:@"\n"];    
for(myText in lines)
{

    texview.text = myText;  

}


}  

好的我试试这段代码,不要工作,我做错了什么?

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString * const kKey = @"OneTimeKey";
NSObject  *keyValue = [defaults  objectForKey:kKey];



NSString *filePath = [[NSBundle mainBundle] pathForResource:@"qa" ofType:@"txt"];  

NSString *myText = [NSString  stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];   
NSArray *lines = [myText componentsSeparatedByString:@"|"];    



if (keyValue==nil) {
    for(myText in lines)

    {

        preguntadia.text = myText;  

        [defaults setBool:YES forKey:kKey];

    }



}

2 个答案:

答案 0 :(得分:1)

问题是你的“for”执行速度非常快,你只能看到数组的最后一个元素被设置为文本视图的时间。

你可以做的是有一个变量,它指定下一个要显示的字符串,并且使用计时器,每隔几秒就在文本视图上设置一个不同的字符串,这样你就可以实际看到这些变化。

奖金,你可以用这样的东西循环:

-(void)updateText{
    [textView setText:[lines objectAtIndex:currentIndex]];
    currentIndex++;
    currentIndex = currentIndex % [lines count];
}

所以当它到达最后一个字符串时,它再次显示第一个字符串。

答案 1 :(得分:1)

我认为你需要在本地存储一个行计数器以便跟踪。用这样的东西很容易实现保存:

[[NSUserDefaults standardDefaults] setInteger:lineCount forKey:@"lineCountKey"];

并获取:

int lineCount = [[NSUserDefaults standardDefaults] integerForKey:@"lineCountKey"];

然后在打开文件时阅读并丢弃lineCount行。

现在,将您想要的行拆分为多个部分,您可以使用NSString方法componentsSeparatedByString:,但要小心。如果您的“问题”实际上是多字的问题,那么您需要选择除空格之外的分隔符。竖条(|)可能是一个不错的选择,那么你可以这样做:

NSArray *questions = [line componentsSeparatedByString:@"|"];

注意:代码从内存中输入;没编译。 : - )