将五部分CSV文件解析为阵列



我有一个带有五个部分的CSV文件;ap_id,email_domain,email_user,first_name,last_name至少有150行。我试图将其解析为5个单独的数组。我尝试使用此代码

NSMutableArray *apid = [NSMutableArray array];
NSMutableArray *emailtwo = [NSMutableArray array];
NSMutableArray *emailone = [NSMutableArray array];
NSMutableArray *firstname = [NSMutableArray array];
NSMutableArray *secondname = [NSMutableArray array];
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"2016 inter ind" ofType:@"csv"];
NSString *string = [ NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSCharacterSet *separator = [NSCharacterSet newlineCharacterSet];
NSArray *array = [string componentsSeparatedByCharactersInSet:separator ];
NSLog(@"array:%@",array);
for (NSString *row in array){
    NSLog(@"row;%@",row);
    NSArray* columns = [row componentsSeparatedByString:@","];
    [apid addObject:columns[0]];
    [emailtwo addObject:columns[1]];
}

获取此错误:

2017-05-31 16:54:29.582 mail sort app[46082:110639338] row;ap_id,email_domain,email_user,first_name,last_name
2017-05-31 16:54:29.582 mail sort app[46082:110639338] row;
2017-05-31 16:54:29.584 mail sort app[46082:110639338] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:

但是我知道列中的所有行都有[1]

中的所有条目

任何建议都将不胜感激。

解析行时,在尝试明确参考该行的单个列之前,它不会淘汰空白行。为了使其更安全,请确保您的数据集在尝试解析之前具有适当数量的列数。

for (NSString *row in array){
    NSLog(@"row;%@",row);
    NSArray* columns = [row componentsSeparatedByString:@","];
    if(columns.count >= 5) { // make sure row has at least 5 columns before parsing
        [apid addObject:columns[0]];
        [emailtwo addObject:columns[1]];
        ...
    }
}

在您的评论中,您提到您将定界符从newlineCharacterSet更改为@"n",但是您仍然应该对这种方法保持警惕。如果空白行曾经进入您的数据集,则您的应用程序将崩溃。

最新更新