2009-06-21 1 views
1

NSScannerを使用して、カンマと区切りの両方のデータを解析しています。実装はかなり簡単でしたが、私は非常に単純な問題にぶつかっています。たとえ空であっても、次の行でスキャンしたいと思います。私が今問題にしているのは、空行があると、それをスキップして次の行を読み込むということです。間違ったデータが間違った場所に置かれたため、解析が中断されます。ここで私は今持っているコードは次のとおりです。NSScanner - 次の行を文字列にスキャンする

NSCharacterSet *setToIgnore = [NSCharacterSet characterSetWithCharactersInString:@",\r\n"]; 
[scanner setCharactersToBeSkipped:setToIgnore]; 

NSInteger levelID, campaignID; 
NSString *title, *about, *gameBoard; 
BOOL aTest = [scanner scanInteger:&levelID] && [scanner scanInteger:&campaignID]; 
aTest = [scanner scanUpToString:@"\r\n" intoString:&title]; 
aTest = [scanner scanUpToString:@"\r\n" intoString:&about]; 
aTest = [scanner scanUpToString:@"\r\n" intoString:&gameBoard]; 

ので、同じようにデータをフォーマットする: int型、 文字列 列 文字列をint型

は時々、2番目の文字列は(約)空で、NSScannerスキップして、gameBoard文字列を読み込みます。 NSScannerに次の行を読み込ませるように指示するにはどうすればよいですか?

+0

可能であれば、.plistをNSDictionaryに読み込むように、自動的に解析できる形式を使用しないでください。 –

答えて

2

解決方法1:setToIgnore文を削除し、手動であなたの区切り文字を過ぎてスキャン:

NSInteger levelID, campaignID; 
NSString *title, *about, *gameBoard; 
BOOL aTest = [scanner scanInteger:&levelID] 

[scanner setScanLocation:[scanner scanLocation]+1]; // skip comma 
aTest=[scanner scanInteger:&campaignID]; 
[scanner setScanLocation:[scanner scanLocation]+2]; // skip line break 
aTest = [scanner scanUpToString:@"\r\n" intoString:&title]; 
[scanner setScanLocation:[scanner scanLocation]+2]; // skip line break 
aTest = [scanner scanUpToString:@"\r\n" intoString:&about]; 
[scanner setScanLocation:[scanner scanLocation]+2]; // skip line break 
aTest = [scanner scanUpToString:@"\r\n" intoString:&gameBoard]; 
[scanner setScanLocation:[scanner scanLocation]+2]; // skip line break 

が解決策2:と全体の多くを置き換えます

NSArray *lines=[file componentsSeparatedByString:@"\r\n"]; 

そしてループを通って、個別の行を解析。

1

\r\nを無視しないでください。

関連する問題