Skip to content

Commit

Permalink
Merge pull request #59 from yconst/master
Browse files Browse the repository at this point in the history
Added a few convenience methods that allow specifying a delimiter.
  • Loading branch information
davedelong committed Feb 15, 2014
2 parents 59e4d66 + 45aceae commit a54a371
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 6 deletions.
7 changes: 7 additions & 0 deletions CHCSVParser/CHCSVParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -99,14 +102,18 @@ 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

@interface NSString (CHCSVAdditions)

- (NSArray *)CSVComponents;
- (NSArray *)CSVComponentsWithDelimiter:(unichar)delimiter;
- (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options;
- (NSArray *)CSVComponentsWithOptions:(CHCSVParserOptions)options delimiter:(unichar)delimiter;

@end
47 changes: 41 additions & 6 deletions CHCSVParser/CHCSVParser.m
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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)];
Expand Down Expand Up @@ -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)];
Expand Down

0 comments on commit a54a371

Please sign in to comment.