2011-02-07 57 views
1

我有一個問題,使得掃描儀可以爲這個特定的字符串工作。NSScanner從未達到「isAtEnd」或不掃描完整字符串

這裏來了代碼:

tempString = @"30.15 in. Hg (1021 hPa)"; 
scanner = [NSScanner scannerWithString:tempString]; //setting the scanning location, 
[scanner setCharactersToBeSkipped:[[NSCharacterSet characterSetWithCharactersInString:@".,-+ "]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)";

i噸也很好。

問題來自「。」 (dot)

任何干淨的解決方案,使這項工作?

非常感謝。

回答

2

您可以檢查-scanFloat:是否返回YES以檢查是否掃描了有效的浮點數。如果返回NO,則跳過該字符。

while (![scanner isAtEnd]) { 
    if ([scanner scanFloat:&value]) { 
     if(_i == 1) { 
     pressure = value; 
     } 
     _i++; 
    } else { 
     [scanner setScanLocation:[scanner scanLocation] + 1]; 
    } 
} 
+1

完美!這就是我所期望的!非常感謝。 – Vassily 2011-02-07 12:36:24

0
tempString = @"30.15 in. Hg (1021 hPa)"; 
scanner = [NSScanner scannerWithString:tempString]; 
[scanner scanUpToString:@"(" intoString:nil]; 
[scanner scanString:@"(" intoString:nil]; 
[scanner scanFloat:&value]; 
+0

謝謝,這確實是解決問題的好方法。我也很樂意瞭解它的工作方式:爲什麼點「。」使掃描儀停止或爲什麼掃描儀永遠不會在while循環中結束。 – Vassily 2011-02-07 12:18:10