2011-07-27 33 views
1

を解析するために使用NSScanner:解析する2行の文字列である文字列

00:02.0 VGA compatible controller [0300]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2772] (rev 02) 
00:02.1 Display controller [0380]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2776] (rev 02) 

これらの文字列を取得するには:

を(1行目から)

  • VGA互換コントローラ
  • インテルコーポレーション82945G/GZ内蔵グラフィックスコントローラ
  • [8086:2772]

(2行目から)

  • ディスプレイコントローラ
  • インテル82945G/GZ統合グラフィックスコントローラ
  • [8086:2776]

今私の開始コードです。

NSScanner *scn = [NSScanner scannerWithString:strtoparse]; 
NSString *devtype;  
while ([scn isAtEnd] == NO) 
    { 
     if([scn scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL] && 
     [scn scanUpToString:@"[" intoString:&devtype]); 
    } 

とこれは動作しません。私はドキュメントからスキャナを理解することすらできません。だから誰かが作業コードを投稿できますか?

答えて

2

クイック抜粋:

NSString *theString = @"00:02.0 VGA compatible controller [0300]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2772] (rev 02)\n00:02.1 Display controller [0380]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2776] (rev 02)"; 

NSScanner *theScanner = [NSScanner scannerWithString:theString]; 

NSCharacterSet *space = [NSCharacterSet characterSetWithCharactersInString:@" "]; 
NSCharacterSet *bracket = [NSCharacterSet characterSetWithCharactersInString:@"["]; 
NSCharacterSet *linebreak = [NSCharacterSet newlineCharacterSet]; 

NSString *type; 
NSString *name; 
NSString *number; 

while (![theScanner isAtEnd]) 
{ 
    [theScanner scanUpToCharactersFromSet:space intoString:nil] ; 
    [theScanner scanUpToCharactersFromSet:bracket intoString:&type]; 
    [theScanner scanUpToCharactersFromSet:space intoString:nil] ; 
    [theScanner scanUpToCharactersFromSet:bracket intoString:&name]; 
    [theScanner scanUpToCharactersFromSet:space intoString:&number]; 
    [theScanner scanUpToCharactersFromSet:linebreak intoString:nil] ; 

    NSLog(type); 
    NSLog(name); 
    NSLog(number); 
} 

出力:

VGA compatible controller 
Intel Corporation 82945G/GZ Integrated Graphics Controller 
[8086:2772] 
Display controller 
Intel Corporation 82945G/GZ Integrated Graphics Controller 
[8086:2776]