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

来源:互联网 发布:linux windows 效率 编辑:程序博客网 时间:2024/06/07 03:31
#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 testDataNSString *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 NSScannerNSScanner *myScanner = [NSScanner scannerWithString:testData];NSString    *location;float        theRevenue;float        thePercent;int            theRank;// Set up data delimiter using semicolonNSCharacterSet *CharacterSet;CharacterSet = [NSCharacterSet characterSetWithCharactersInString:@";,"];// Double check scanner stringNSLog (@"Scanner string\n");NSLog (@"%@",[myScanner string]);// scanner loop startwhile ([myScanner isAtEnd] == NO) {if ( [myScanner scanUpToCharactersFromSet:CharacterSet intoString:&location] ) {NSLog (@"%@",location);}        // Skipping the ; and ,delimiterif([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);// Read Revenue data up to ; delimiter and skippingif([myScanner scanFloat:&theRevenue])NSLog(@"%lf",theRevenue);if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);// Read Percentage data up to ; delimiter and skippingif([myScanner scanFloat:&thePercent])NSLog(@"%lf",thePercent);if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);// Read Ranking data up to ; delimiter and skippingif([myScanner scanInt:&theRank])NSLog(@"%i",theRank);if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL]);}    [pool drain];return 0;}