Я очень новичок в разработке для iOS. Я пытаюсь проанализировать простой CSV-файл, который имеет около 10 строк, разделенных запятыми. Я использую приведенный ниже код, но не могу понять, почему NSScanner
при разборе полей (полей в коде ниже) не переходит к следующей строке после запятой. Я должен выполнить строку
[fields scanCharactersFromSet:fieldCharSet intoString:nil];
чтобы он прошел через разделитель. Однако мне не нужно делать то же самое для строк - NSScanner
автоматически устанавливает позицию на следующей строке после новой строки. В обоих случаях я использую один и тот же метод - [lines scanUpToCharactersFromSet: intoString] Есть что-то, чего я не понимаю?
Вот тестовый файл, который я пытаюсь проанализировать:
Name,Location,Number,Units
A,AA,4,mm
B,BB,3.5,km
C,CC,10.2,mi
D,DD,2,mm
E,EE,6,in
F,FF,2.8,m
G,GG,3.7,km
H,HH,4.3,mm
I,II,4,km
Вот мой код:
-(void)parseFile {
NSCharacterSet *lineCharSet = [NSCharacterSet newlineCharacterSet];
NSCharacterSet *fieldCharSet = [NSCharacterSet characterSetWithCharactersInString:self.separator];
// import the file
NSStringEncoding *encoding = nil;
NSError *error = nil;
NSString *data = [[NSString alloc] initWithContentsOfURL:self.absoluteURL usedEncoding:encoding error:&error];
NSString *line,*field;
NSScanner *lines = [NSScanner scannerWithString:data];
while (![lines isAtEnd]) {
[lines scanUpToCharactersFromSet:lineCharSet intoString:&line];//automatically sets to next line - why?
NSLog(@"%@\n",line);
NSScanner *fields = [NSScanner scannerWithString:line];
while (![fields isAtEnd]) {
[fields scanUpToCharactersFromSet:fieldCharSet intoString:&field];
[fields scanCharactersFromSet:fieldCharSet intoString:nil]; //have to do this otherwise will not go to next symbol
NSLog(@"%@\n", field);
}
}
}