0

我正在尝试使用 Objective-C 从外部 txt 文件(约 180kb)中逐行读取。我在 SO 上找到了这段代码。我理解它的方式,这段代码会将每一行放在一个元素中,对吗?

- (IBAction)start:(id)sender; {
    NSString *fh = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
    for (NSArray *line in [fh componentsSeparatedByString:@"\n"]) {
        NSLog(@"output= %@",line[5]);
    }
}

我尝试通过在输出中打印一行来检查它是否正常工作,但没有任何反应,我在这里做错了什么?

谢谢,

更新:我进行了建议的更改,结果 fh 确实为零。如果我将 fh 设为一个包含一段文本文件(包括几个 \n)的字符串,它可以正常工作。我检查了文件路径,但这似乎没问题,所以现在的问题是 fh = nil 是怎么来的?

NSString *fh = [NSString stringWithContentsOfFile:@"file:///Users/Mubanga/Documents/Blender/rough2.txt" encoding:NSUTF8StringEncoding error:nil];
if([fh length] == 0) {
    NSLog(@"fh=nil");
}
for (NSString *line in [fh componentsSeparatedByString:@"\n"]) {
    NSLog(@"output= %@",line);
    }

}
4

3 回答 3

3

循环应该是:

for (NSString *line in [fh componentsSeparatedByString:@"\n"]) {
    NSLog(@"output= %@",line);
}

line将是一个NSString,输出应该是line,不是line[5])。

于 2014-01-30T14:56:03.290 回答
3

除了@trojanfoe 的答案所需的更改之外,您fhnil 原因是路径错误。stringWithContentsOfFile:需要一个简单的路径,而不是文件 URL。它应该是:

 NSString *fh = [NSString stringWithContentsOfFile:@"/Users/Mubanga/Documents/Blender/rough2.txt" encoding:NSUTF8StringEncoding error:nil];

通常,您应该使用错误参数:

NSError *error;
NSString *fh = [NSString stringWithContentsOfFile:@"/Users/Mubanga/Documents/Blender/rough2.txt"
                                         encoding:NSUTF8StringEncoding
                                            error:&error];
if (fh == nil) {
    NSLog(@"Could not read file: %@", error);
} else {
    // ...
}
于 2014-01-30T15:34:15.287 回答
1

我会使用本机 C 调用手动输入字符。只是read()进入 achar[] buffer直到你打一个换行符,然后处理缓冲区。不,我不会为您编写代码,请查看仍然相关的K&R

于 2014-01-30T15:27:08.387 回答