shebi
shebi

Reputation: 719

Reading 'CSV' file in xCode

Could you please help me for reading this csv file?

CSV Output

"^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

ViewController.m

- (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

Answers (2)

objectiveCoder
objectiveCoder

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

Sergey Kalinichenko
Sergey Kalinichenko

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

Related Questions