我有一个包含五个部分的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]
中的所有行都有条目任何建议都将不胜感激。
答案 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"
,但您仍应对此方法保持警惕。如果空白行进入您的数据集,您的应用程序将崩溃。