使用CHCSVParser将TSV文件处理为NSArray

时间:2014-02-14 14:26:23

标签: objective-c csv

我有一个TSV文件存储在iOS 7应用程序的Documents中,我正在尝试使用CHCSVParser将文件处理成NSArrayNSArray个对象)。

我目前正在尝试使用的代码是:

NSArray *fields = [NSArray arrayWithContentsOfCSVFile:csvFile options:CHCSVParserOptionsRecognizesBackslashesAsEscapes];

如果我将文件转换为CSV而不是TSV之前,这非常有效,尽管这不是生产中的选项。

我知道CHCSVParser还能够解析TSV文件,但我似乎无法弄清楚如何以与上面类似的方式做到这一点,能够指定分隔符。我在寻找错误的地方吗?

1 个答案:

答案 0 :(得分:2)

我自己也有这个问题,为了爱我,我找不到一个简单的方法去做。

所以最后我对代码进行了一些修改(请注意,下面是我的头脑中的一部分。)

添加了新方法arrayWithContentsOfCSVFile:options:delimiter:

+ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath options:(CHCSVParserOptions)options delimiter:(unichar)delimiter {
    NSParameterAssert(csvFilePath);
    _CHCSVAggregator *aggregator = [[_CHCSVAggregator alloc] init];
    CHCSVParser *parser = [[CHCSVParser alloc] initWithContentsOfCSVFile:csvFilePath delimiter:delimiter];
    [parser setDelegate:aggregator];

    [parser setRecognizesBackslashesAsEscapes:!!(options & CHCSVParserOptionsRecognizesBackslashesAsEscapes)];
    [parser setSanitizesFields:!!(options & CHCSVParserOptionsSanitizesFields)];
    [parser setRecognizesComments:!!(options & CHCSVParserOptionsRecognizesComments)];
    [parser setStripsLeadingAndTrailingWhitespace:!!(options & CHCSVParserOptionsStripsLeadingAndTrailingWhitespace)];

    [parser parse];
    CHCSV_RELEASE(parser);

    NSArray *final = CHCSV_AUTORELEASE(CHCSV_RETAIN([aggregator lines]));
    CHCSV_RELEASE(aggregator);

    return final;
}

添加了另一种新方法initWithContentsOfCSVFile:csvFilePath:delimiter:

- (id)initWithContentsOfCSVFile:(NSString *)csvFilePath delimiter:(unichar)delimiter {
    NSInputStream *stream = [NSInputStream inputStreamWithFileAtPath:csvFilePath];
    NSStringEncoding encoding = 0;
    return [self initWithInputStream:stream usedEncoding:&encoding delimiter:delimiter];
}

所以现在我每次都要指定分隔符:

[arrayWithContentsOfCSVFile:file options:options delimiter:'\t'];