diff --git a/CHCSVParser/CHCSVParser.h b/CHCSVParser/CHCSVParser.h index 436d3f9..d99ef5d 100644 --- a/CHCSVParser/CHCSVParser.h +++ b/CHCSVParser/CHCSVParser.h @@ -64,7 +64,10 @@ typedef NSInteger CHCSVErrorCode; - (id)initWithInputStream:(NSInputStream *)stream usedEncoding:(NSStringEncoding *)encoding delimiter:(unichar)delimiter; - (id)initWithCSVString:(NSString *)csv; +- (id)initWithCSVString:(NSString *)csv delimiter:(unichar)delimiter; + - (id)initWithContentsOfCSVFile:(NSString *)csvFilePath; +- (id)initWithContentsOfCSVFile:(NSString *)csvFilePath delimiter:(unichar)delimiter; - (void)parse; - (void)cancelParsing; @@ -99,7 +102,9 @@ typedef NS_OPTIONS(NSUInteger, CHCSVParserOptions) { @interface NSArray (CHCSVAdditions) + (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath; ++ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath delimiter:(unichar)delimiter; + (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath options:(CHCSVParserOptions)options; ++ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath options:(CHCSVParserOptions)options delimiter:(unichar)delimiter; - (NSString *)CSVString; @end @@ -107,6 +112,8 @@ typedef NS_OPTIONS(NSUInteger, CHCSVParserOptions) { @interface NSString (CHCSVAdditions) - (NSArray *)CSVComponents; +- (NSArray *)CSVComponentsWithDelimiter:(unichar)delimiter; - (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options; +- (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options delimiter:(unichar)delimiter; @end diff --git a/CHCSVParser/CHCSVParser.m b/CHCSVParser/CHCSVParser.m index a89adad..0b31110 100644 --- a/CHCSVParser/CHCSVParser.m +++ b/CHCSVParser/CHCSVParser.m @@ -80,12 +80,26 @@ - (id)initWithCSVString:(NSString *)csv { return [self initWithInputStream:stream usedEncoding:&encoding delimiter:COMMA]; } +- (id)initWithCSVString:(NSString *)csv delimiter:(unichar)delimiter +{ + NSStringEncoding encoding = [csv fastestEncoding]; + NSInputStream *stream = [NSInputStream inputStreamWithData:[csv dataUsingEncoding:encoding]]; + return [self initWithInputStream:stream usedEncoding:&encoding delimiter:delimiter]; +} + - (id)initWithContentsOfCSVFile:(NSString *)csvFilePath { NSInputStream *stream = [NSInputStream inputStreamWithFileAtPath:csvFilePath]; NSStringEncoding encoding = 0; return [self initWithInputStream:stream usedEncoding:&encoding delimiter:COMMA]; } +- (id)initWithContentsOfCSVFile:(NSString *)csvFilePath delimiter:(unichar)delimiter +{ + NSInputStream *stream = [NSInputStream inputStreamWithFileAtPath:csvFilePath]; + NSStringEncoding encoding = 0; + return [self initWithInputStream:stream usedEncoding:&encoding delimiter:delimiter]; +} + - (id)initWithInputStream:(NSInputStream *)stream usedEncoding:(NSStringEncoding *)encoding delimiter:(unichar)delimiter { NSParameterAssert(stream); NSParameterAssert(delimiter); @@ -730,13 +744,23 @@ - (void)parser:(CHCSVParser *)parser didFailWithError:(NSError *)error { @implementation NSArray (CHCSVAdditions) + (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath { - return [self arrayWithContentsOfCSVFile:csvFilePath options:0]; + return [self arrayWithContentsOfCSVFile:csvFilePath options:0 delimiter:COMMA]; } -+ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath options:(CHCSVParserOptions)options{ ++ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath delimiter:(unichar)delimiter +{ + return [self arrayWithContentsOfCSVFile:csvFilePath options:0 delimiter:delimiter]; +} + ++ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath options:(CHCSVParserOptions)options +{ + return [self arrayWithContentsOfCSVFile:csvFilePath options:options delimiter:COMMA]; +} + ++ (instancetype)arrayWithContentsOfCSVFile:(NSString *)csvFilePath options:(CHCSVParserOptions)options delimiter:(unichar)delimiter { NSParameterAssert(csvFilePath); _CHCSVAggregator *aggregator = [[_CHCSVAggregator alloc] init]; - CHCSVParser *parser = [[CHCSVParser alloc] initWithContentsOfCSVFile:csvFilePath]; + CHCSVParser *parser = [[CHCSVParser alloc] initWithContentsOfCSVFile:csvFilePath delimiter:delimiter]; [parser setDelegate:aggregator]; [parser setRecognizesBackslashesAsEscapes:!!(options & CHCSVParserOptionsRecognizesBackslashesAsEscapes)]; @@ -773,13 +797,24 @@ - (NSString *)CSVString { @implementation NSString (CHCSVAdditions) + - (NSArray *)CSVComponents { - return [self CSVComponentsWithOptions:0]; + return [self CSVComponentsWithOptions:0 delimiter:COMMA]; +} + +- (NSArray *)CSVComponentsWithDelimiter:(unichar)delimiter +{ + return [self CSVComponentsWithOptions:0 delimiter:delimiter]; +} + +- (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options +{ + return [self CSVComponentsWithOptions:options delimiter:COMMA]; } -- (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options { +- (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options delimiter:(unichar)delimiter { _CHCSVAggregator *aggregator = [[_CHCSVAggregator alloc] init]; - CHCSVParser *parser = [[CHCSVParser alloc] initWithCSVString:self]; + CHCSVParser *parser = [[CHCSVParser alloc] initWithCSVString:self delimiter:delimiter]; [parser setDelegate:aggregator]; [parser setRecognizesBackslashesAsEscapes:!!(options & CHCSVParserOptionsRecognizesBackslashesAsEscapes)];