Reputation: 719
Could you please help me for reading this csv file?
"^GSPC",1403.36,"4/27/2012","4:32pm",+3.38,1400.19,1406.64,1397.31,574422720 "^IXIC",3069.20,"4/27/2012","5:30pm",+18.59,3060.34,3076.44,3043.30,0
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *absoluteURL = @"http://myserver/data.csv";
NSURL *url = [NSURL URLWithString:absoluteURL];
NSString *fileString = [[NSString alloc] initWithContentsOfURL:url];
NSScanner *scanner = [NSScanner scannerWithString:fileString];
[scanner setCharactersToBeSkipped:
[NSCharacterSet characterSetWithCharactersInString:@"\n, "]];
NSMutableArray *newPoints = [NSMutableArray array];
}
Upvotes: 2
Views: 7520
Reputation: 579
I might be too late to answer this but may be this answer can help someone to read CSV file with ease. This is what i Have don't to read CSV file
- (void)viewDidLoad {
[super viewDidLoad];
// printing the file path
NSMutableArray *colA = [NSMutableArray array];
NSMutableArray *colB = [NSMutableArray array];
NSMutableArray *colC = [NSMutableArray array];
NSMutableArray *colD = [NSMutableArray array];
// NSString* fileContents = [NSTemporaryDirectory()
stringByAppendingPathComponent:@"yourfile.csv"];
NSString *fileContents = [[NSBundle mainBundle]
pathForResource:@"yourfile" ofType:@"csv"];
NSURL*URl = [NSURL fileURLWithPath:fileContents];
// NSString* fileContents = [NSString
stringWithContentsOfURL:@"YourFile.csv"];
NSError *error;
NSString* fileContentss = (NSString *)[NSString
stringWithContentsOfURL:URl encoding:NSASCIIStringEncoding
error:&error];
NSMutableArray *newArra = [[NSMutableArray alloc] init];
[fileContentss stringByReplacingOccurrencesOfString:@"\""
withString:@""];
NSArray* rows = [fileContentss
componentsSeparatedByString:@"\n"];
NSMutableArray *roearr = [[NSMutableArray alloc] init];
roearr = [rows mutableCopy];
[roearr removeObjectAtIndex:[rows count] - 1];
for (NSString *row in roearr){
NSArray* columns = [row componentsSeparatedByString:@","];
newArra = [columns mutableCopy];
[newArra removeObjectAtIndex:[newArra count] - 1];
[colA addObject:newArra[0]];
[colB addObject:newArra[1]];
[colC addObject:newArra[2]];
[colD addObject:columns[3]];
}
NSLog(@"columns[0] %@",colA);
NSLog(@"columns[0] %@",colB);
NSLog(@"columns[0] %@",colC);
NSLog(@"columns[0] %@",colD);
// Do any additional setup after loading the view, typically from
a nib.
}
Upvotes: 0
Reputation: 726987
Handling CSV parsing is a lot tricker than your initial code implies, because quoted separators need to be ignored. For example,
1,"Hello, world!",2
has three columns, but NSScanner
would find four tokens (1
, "Hello
, "world!", and 2
).
There are many special cases to handle in order to build a full-featured CSV parser, so the fastest way to get it working is to use a pre-built one. For example, you could use the parser described in this answer on Stack Overflow.
Upvotes: 2