Я пытаюсь разобрать строку в таком формате:
*date1:
- band1.1 @ venue1.1.
- band1.2 @ venue1.2.
*date2:
- band 2.1 @ venue2.1.
- band 2.2 @ venue2.2.
и т.д
Количество дат, количество групп и связанное с ними место проведения могут варьироваться. Я использую код на основе примера в нижней части эта страница.
Я использую этот фрагмент кода (я пропустил биты внизу, поскольку они не имеют значения, но да, я закрываю циклы и т. д.):
NSScanner *scanner1 = [NSScanner scannerWithString:contents];
NSCharacterSet *colon = [NSCharacterSet characterSetWithCharactersInString:@":"];
NSCharacterSet *at = [NSCharacterSet characterSetWithCharactersInString:@"@"];
NSCharacterSet *dot = [NSCharacterSet characterSetWithCharactersInString:@"."];
NSLog(@"scanner starting");
while ([scanner1 isAtEnd] == NO) {
if ([scanner1 scanString:@"*" intoString:NULL] && [scanner1 scanUpToCharactersFromSet:colon intoString:&tempDate] && [scanner1 scanString:@":" intoString:NULL])
{
NSLog(@"%@", tempDate);
if ([scanner1 scanString:@"-" intoString:NULL] && [scanner1 scanUpToCharactersFromSet:at intoString:&tempBands] && [scanner1 scanString:@"@" intoString:NULL] && [scanner1 scanUpToCharactersFromSet:dot intoString:&tempVenue]
&&[scanner1 scanString:@"." intoString:NULL])
{
NSLog(@"%@ %@", tempBands, tempVenue);
}
}
} NSLog(@"ended scanning");
В настоящее время первая дата анализируется и выводится на консоль, а также первое место проведения и группа этой даты. "Завершенное сканирование" никогда не печатается. Я боролся с этим в течение нескольких часов, и я не уверен, что делать сейчас. У меня есть ощущение, что я не понимаю внутреннюю работу NSScanner, и, вероятно, есть другой способ решить эту проблему. Может быть, мне нужен второй сканер?