// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; [self test]; // Reference output... dumpCharacterSet( @"alphanumericCharacterSet" ); dumpCharacterSet( @"controlCharacterSet" ); dumpCharacterSet( @"decimalDigitCharacterSet" ); dumpCharacterSet( @"decomposableCharacterSet" ); dumpCharacterSet( @"illegalCharacterSet" ); dumpCharacterSet( @"letterCharacterSet" ); dumpCharacterSet( @"lowercaseLetterCharacterSet" ); dumpCharacterSet( @"nonBaseCharacterSet" ); dumpCharacterSet( @"punctuationCharacterSet" ); dumpCharacterSet( @"uppercaseLetterCharacterSet" ); dumpCharacterSet( @"whitespaceAndNewlineCharacterSet" ); dumpCharacterSet( @"whitespaceCharacterSet" ); } - (void)test { // Set up for reading testString NSString *testString = @"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:testString]; NSString *location; float theRevenue; float thePercent; int theRank; // Set up data delimiter using semicolon//分号 NSCharacterSet *CharacterSet; //Returns a character set containing the characters in a given string. CharacterSet = [NSCharacterSet characterSetWithCharactersInString:@";,"]; // Double check scanner string NSLog (@"Scanner string\n"); //Returns the string with which the receiver was created or initialized. 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 //Scans for a float value, returning a found value by reference. 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]) ; } } void dumpCharacterSet( NSString *name ) { unichar idx; NSCharacterSet *cset = [NSCharacterSet performSelector: NSSelectorFromString(name)]; printf("Character set (0-127): %s\n7-Bit: ", [name UTF8String]); for( idx = 0; idx < 256; idx++ ) { if ( 128 == idx ) { printf( "\n8-Bit: " ); } //Returns a Boolean value that indicates whether a given character is in the receiver. if ([cset characterIsMember: idx]) { //判断字符c是否为可打印字符(含空格) if ( isprint(idx) ) { printf( "%c ", idx); } else { printf( "%02x ", idx); } } } printf("\n\n"); }
使用xcode4.0编译,有错误,说void dumpCharacterSet( NSString *name )方法有冲突,但是呢,,还能运行。。。
xcode4.0的bug