首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Objective-C:逐行读取文件

Objective-C:逐行读取文件
EN

Stack Overflow用户
提问于 2009-06-25 14:41:23
回答 13查看 154.8K关注 0票数 141

在Objective-C中处理大型文本文件的适当方式是什么?假设我需要单独读取每一行,并希望将每一行都视为一个NSString。执行此操作的最有效方法是什么?

一种解决方案是使用NSString方法:

代码语言:javascript
复制
+ (id)stringWithContentsOfFile:(NSString *)path 
      encoding:(NSStringEncoding)enc 
      error:(NSError **)error 

然后用换行分隔符拆分行,然后迭代数组中的元素。然而,这似乎相当低效。有没有一种简单的方法可以将文件作为流处理,枚举每一行,而不是一次性读取所有文件?有点像Java的java.io.BufferedReader。

EN

回答 13

Stack Overflow用户

发布于 2010-08-04 07:30:37

Mac是Unix,Objective-C是C超集,所以你可以只使用<stdio.h>的老式fopenfgets。它肯定会起作用。

[NSString stringWithUTF8String:buf]会将C字符串转换为NSString。还有一些方法可以用其他编码创建字符串,也可以在不复制的情况下创建字符串。

票数 12
EN

Stack Overflow用户

发布于 2009-06-25 16:46:56

您可以使用NSInputStream,它有一个基本的文件流实现。您可以将字节读入缓冲区(read:maxLength:方法)。您必须自己扫描缓冲区中的换行符。

票数 9
EN

Stack Overflow用户

发布于 2016-03-08 03:50:10

这些答案中的许多都是很长的代码块,或者它们在整个文件中读取。我喜欢使用c方法来完成这项任务。

代码语言:javascript
复制
FILE* file = fopen("path to my file", "r");

size_t length;
char *cLine = fgetln(file,&length);

while (length>0) {
    char str[length+1];
    strncpy(str, cLine, length);
    str[length] = '\0';

    NSString *line = [NSString stringWithFormat:@"%s",str];        
    % Do what you want here.

    cLine = fgetln(file,&length);
}

注意,fgetln不会保留换行符。另外,我们+1字符串的长度,因为我们想为空终止腾出空间。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1044334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档