将五部分csv文件解析为数组

时间:2017-06-01 00:03:23

标签: ios objective-c arrays csv parsing

我有一个包含五个部分的csv文件; 的Ap_Id,EMAIL_DOMAIN,email_user,名字,姓氏 至少有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]

中的所有行都有条目

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

解析行时,在尝试显式引用该行的各个列之前,它不会清空空行。为了更安全,请在尝试解析之前确保数据集具有适当的列数。

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",但您仍应对此方法保持警惕。如果空白行进入您的数据集,您的应用程序将崩溃。