NSScanner никогда не достигает "isAtEnd" или не сканирует полную строку - PullRequest
1 голос
/ 07 февраля 2011

У меня проблема со сканером, работающим на эту конкретную строку.

, вот код:

tempString = @"30.15 in. Hg (1021 hPa)";
scanner = [NSScanner scannerWithString:tempString]; //setting the scanning location,
[scanner setCharactersToBeSkipped:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789.,-+ "]invertedSet]];
value = 0;
_i = 0;
while([scanner isAtEnd] == NO)
{
    [scanner scanFloat:&value];
    if(_i == 1)
    {
        pressure = value;
    }
    _i++;
}
NSLog(@"pressure = %f hpa",pressure);

этот бесконечный цикл ...

, еслиЯ изменяю строку с помощью: tempString = @"30.15 in 8.8 Hg (1021 hPa)";

, тогда она отлично работает

также, если я изменяю с помощью: tempString = @"30.15 in Hg (1021 hPa)";

, она также отлично работает.* проблема исходит от "."(точка)

любое чистое решение, чтобы сделать эту работу?

большое спасибо.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Вы можете проверить, возвращает ли -scanFloat: ДА, чтобы проверить, сканируется ли допустимое число с плавающей запятой. Пропустить символ, если он возвращает NO.

while (![scanner isAtEnd]) {
    if ([scanner scanFloat:&value]) {
      if(_i == 1) {
        pressure = value;
      }
      _i++;
    } else {
      [scanner setScanLocation:[scanner scanLocation] + 1];
    }
}
0 голосов
/ 07 февраля 2011
tempString = @"30.15 in. Hg (1021 hPa)";
scanner = [NSScanner scannerWithString:tempString];
[scanner scanUpToString:@"(" intoString:nil];
[scanner scanString:@"(" intoString:nil];
[scanner scanFloat:&value];
...