Я пытаюсь получить содержимое CSV-файла в массив. Когда я сделал это, прежде чем я имел одну запись в каждой строке, и используется символ новой строки с scanUpToCharactersFromSet:intoString:
, передавая newlineCharacterSet
как набор символов:scanUpToCharactersFromSet останавливается после одного цикла
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]);
}
** Edit: ** Благодаря ответ Питера ниже, я обнаружил, что мой сканер застрял позади символа *. Я добавил эту строку в петлю:
[lineScanner scanCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@"*"] intoString:NULL];
и теперь он работает так, как должен.
Вам не нужен разделитель *. Вы можете сканировать для простых разрывов строк просто отлично (теперь, когда ваш цикл исправлен). –