Предположим, у меня есть строка («G00 X0.0000 Y0.0000»), и мне нужно проанализировать ее содержимое. Вот мой код:Еще один символ NSScannerSetWithCharactersInString newb
NSCharacterSet *params = [NSCharacterSet characterSetWithCharactersInString:@"XY"];
//setup the scanner
NSScanner *scanner = [NSScanner scannerWithString:stringToBeScanned];
NSString *scanned = nil;
//scan the string
NSLog(@"%@", stringToBeScanned);
while ([scanner scanUpToCharactersFromSet:params intoString:&scanned]) {
struct keypair code;
code.key = [scanned characterAtIndex:0];
code.value = [[scanned substringFromIndex:1] doubleValue];
NSLog(@"--> %@ [%lu]= (%c, %.4f)", scanned, [scanner scanLocation], code.key, code.value);
}
И выход к NSLog:
G00 X0.0000 Y0.0000
--> G00 [4]= (G, 0.0000)
Мой CharacterSet включает в себя как «X» и «Y», и я не могу понять, почему мой NSScanner не будет сканировать в «X0.0000» - он должен найти, что Y и тянуть во всем от X до Y согласно моему пониманию.
Из области сканирования видно, что сканер останавливается на индексе 4 (правильно), но цикл либо не продолжается, либо не принимает значение false. Разве сканер не должен зацикливаться и находить мои разделители (из набора символов) и захватывать данные?
о. вы говорите, что для продолжения сканирования этой строки и прохождения через x (scanUpTo: «Y») - мне нужно будет удалить «X» из набора символов? хм ... есть множество разных персонажей, с которыми я мог столкнуться, и мне нужно предпринять разные действия, основанные на том, с каким персонажем я сталкиваюсь (а не только с X и Y). Есть ли другой способ, который вы могли бы предложить сделать? Я старался сделать его максимально компактным и эффективным. – donfmorrison
благодарит за информацию. используя эту информацию, я добавил свое решение ниже. – donfmorrison