2

你能帮我阅读这个 csv 文件吗?

CSV 输出

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

视图控制器.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];

}
4

2 回答 2

2

处理 CSV 解析比您的初始代码所暗示的要复杂得多,因为需要忽略带引号的分隔符。例如,

1,"Hello, world!",2

有三列,但NSScanner会找到四个标记(1"Hello、“世界!”和2)。

为了构建功能齐全的 CSV 解析器,需要处理许多特殊情况,因此使其工作的最快方法是使用预构建的解析器。例如,您可以使用Stack Overflow 上此答案中描述的解析器。

于 2012-04-28T14:21:25.877 回答
0

我可能来不及回答这个问题,但可能这个答案可以帮助某人轻松阅读 CSV 文件。这就是我没有阅读 CSV 文件的内容

   - (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.
  }
于 2017-06-14T11:05:36.283 回答