BigBigWorld

Chance001的技术博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转]使用NSScanner解析分段字符串数据

Posted on 2010-02-10 21:46  chance001  阅读(499)  评论(0)    收藏  举报
代码
#import <Cocoa/Cocoa.h>
#import 
<Foundation/Foundation.h>
#import 
<Foundation/NSObject.h>
#import 
<Foundation/NSString.h>
#import 
<Foundation/NSFileManager.h>
#import 
<Foundation/NSAutoreleasePool.h>
#import 
<Foundation/NSDictionary.h>

int main (int argc, const char * argv[]) {

   NSAutoreleasePool 
* pool = [[NSAutoreleasePool alloc] init];

   // Set up for reading testData
   NSString *testData = @"Los Angeles;8.25;0.580561574;1,Tokyo;1.9;0.643872234;1;Honolulu,0;0;0;Toronto;7.9;5.3322;3;";
   // Parse CSV with NSScanner
   NSScanner *myScanner = [NSScanner scannerWithString:testData];

   NSString    
*location;
   float        theRevenue;
   float        thePercent;
   int            theRank;

   // Set up data delimiter using semicolon

   NSCharacterSet 
*CharacterSet;
   CharacterSet 
= [NSCharacterSet characterSetWithCharactersInString:@";,"];

   // Double check scanner string
   NSLog (@"Scanner string\n");
   NSLog (
@"%@",[myScanner string]);

   // scanner loop start
   while ([myScanner isAtEnd] == NO) {

      if ( [myScanner scanUpToCharactersFromSet:CharacterSet intoString:&location] ) {
         NSLog (
@"%@",location);
      }        

   // Skipping the ; and ,delimiter
   if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);
   // Read Revenue data up to ; delimiter and skipping
   if([myScanner scanFloat:&theRevenue])
      NSLog(
@"%lf",theRevenue);
   if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);

   // Read Percentage data up to ; delimiter and skipping
   if([myScanner scanFloat:&thePercent])
      NSLog(
@"%lf",thePercent);
   if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);

   // Read Ranking data up to ; delimiter and skipping
   if([myScanner scanInt:&theRank])
      NSLog(
@"%i",theRank);
   if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);
   }    

[pool drain];

return 0;

 

转自:http://hi.baidu.com/colorapple/blog/item/27c2568f6310d7f0503d92ae.html