为了账号安全,请及时绑定邮箱和手机立即绑定

Objective-C:逐行读取文件

Objective-C:逐行读取文件

FFIVE 2019-07-23 17:41:47
Objective-C:逐行读取文件在Objective-C中处理大型文本文件的适当方法是什么?假设我需要分别读取每一行,并希望将每一行视为NSString。这样做最有效的方法是什么?一种解决方案是使用NSString方法:+ (id)stringWithContentsOfFile:(NSString *)path        encoding:(NSStringEncoding)enc        error:(NSError **)error然后使用换行符分隔符拆分行,然后遍历数组中的元素。但是,这似乎效率很低。有没有简单的方法将文件视为一个流,枚举每一行,而不是一次只读取它?有点像Java的java.io.BufferedReader。
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

这将一般阅读一个工作StringText。如果你想阅读更长的文本(大文本),那么使用其他人提到的方法,如缓冲(保留内存空间中文本的大小)

假设你读了一个文本文件。

NSString* filePath = @""//file path...NSString* fileRoot = [[NSBundle mainBundle] 
               pathForResource:filePath ofType:@"txt"];

你想摆脱新的路线。

// read everything from textNSString* fileContents = 
      [NSString stringWithContentsOfFile:fileRoot 
       encoding:NSUTF8StringEncoding error:nil];// first, separate by new lineNSArray* allLinedStrings = 
      [fileContents componentsSeparatedByCharactersInSet:
      [NSCharacterSet newlineCharacterSet]];// then break down even further NSString* strsInOneLine = 
      [allLinedStrings objectAtIndex:0];// choose whatever input identity you have decided. in this case ;NSArray* singleStrs = 
      [currentPointString componentsSeparatedByCharactersInSet:
      [NSCharacterSet characterSetWithCharactersInString:@";"]];

你有它。


查看完整回答
反对 回复 2019-07-23
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

这应该做的伎俩:

#include <stdio.h>NSString *readLineAsNSString(FILE *file){
    char buffer[4096];
    // tune this capacity to your liking -- larger buffer sizes will be faster, but
    // use more memory
    NSMutableString *result = [NSMutableString stringWithCapacity:256];
    // Read up to 4095 non-newline characters, then read and discard the newline
    int charsRead;
    do
    {
        if(fscanf(file, "%4095[^\n]%n%*c", buffer, &charsRead) == 1)
            [result appendFormat:@"%s", buffer];
        else
            break;
    } while(charsRead == 4095);
    return result;}

使用方法如下:

FILE *file = fopen("myfile", "r");// check for NULLwhile(!feof(file)){
    NSString *line = readLineAsNSString(file);
    // do stuff with line; line is autoreleased, so you should NOT release it (unless you also retain it beforehand)}fclose(file);

此代码从文件中读取非换行符,一次最多4095个。如果您的行长度超过4095个字符,则会一直读取,直到它到达换行符或文件结尾。

注意:我没有测试过这段代码。请在使用前进行测试。


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 1617 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信