Я пытаюсь получить содержимое файла CSV в массив. Когда я делал это раньше, у меня была одна запись на строку, и я использовал символ новой строки с scanUpToCharactersFromSet:intoString:
, передавая newlineCharacterSet
в качестве набора символов:
while ([lineScanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet]
intoString:&line])
Теперь я работаю с файлом, в котором многие записи содержат символы новой строки. Я попытался добавить уникальный символ в конец каждой записи (символ *
), но мой цикл запускается только один раз. Есть ли что-то, что делает разрыв цикла while, о котором я не знаю? Вот код, который я сейчас использую:
NSError *error;
NSString *data = [[NSString alloc] initWithContentsOfFile:[[self delegate] filePath] encoding:NSUTF8StringEncoding error:&error];
NSScanner *lineScanner = [NSScanner scannerWithString:data];
NSString *line = nil;
// Start parsing the CSV file
while ([lineScanner scanUpToCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@"*"]
intoString:&line]) {
NSArray *elements = [line componentsSeparatedByString:@","];
NSLog("Name: %@", [elements objectAtIndex:1]);
}
** Редактировать: ** Благодаря приведенному ниже ответу Питера я обнаружил, что мой сканер застрял за * символом. Я добавил эту строку в цикл:
[lineScanner scanCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@"*"] intoString:NULL];
и теперь работает как надо.