我有一个TSV文件存储在iOS 7应用程序的Documents中,我正在尝试使用CHCSVParser将文件处理成NSArray
(NSArray
个对象)。
我目前正在尝试使用的代码是:
NSArray *fields = [NSArray arrayWithContentsOfCSVFile:csvFile options:CHCSVParserOptionsRecognizesBackslashesAsEscapes];
如果我将文件转换为CSV而不是TSV之前,这非常有效,尽管这不是生产中的选项。
我知道CHCSVParser还能够解析TSV文件,但我似乎无法弄清楚如何以与上面类似的方式做到这一点,能够指定分隔符。我在寻找错误的地方吗?
答案 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'];