I'm trying to load a default set of data from a csv file into my core data db. So initially i'm trying to read in a csv file and output it to the log before trying to add it to the core data database.
This is the code i'm using;
//Find import file;
NSString *defaultCSVPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"csv"];
//Get the data into a string
NSString *fileString = [NSString stringWithContentsOfFile:defaultCSVPath encoding:NSUTF8StringEncoding error:nil];
if ( nil == fileString ) {
NSLog(@"Could not open file data.csv");
abort();
}
// Create the scanner
NSScanner *scanner = [NSScanner scannerWithString:fileString];
// Ignore new lines
[scanner setCharactersToBeSkipped:
[NSCharacterSet characterSetWithCharactersInString:@"\n"]];
NSString *sNumber = @"";
NSString *sTitle = @"";
//Gets to here and this expression is never TRUE
while ( [scanner scanString:@"," intoString:&sNumber] && [scanner scanString:@"," 开发者_JS百科intoString:&sTitle]) {
NSLog(@"sNumber:%@ sTitle:%@",sNumber,sTitle);
}
The sample data i'm using is;
A15Q,Test1
F74443AAZ,Test2
When I trace the code, I get to the while clause and it just skips over it.
Not sure why you initialize sNumber and sTitle to @""; nil is a better default (or you can just not initialize them).
[scanner scanString:@"," intoString:&foo]
expects to see a comma and returns the comma in foo
(it does this for consistency and (I think) Unicode wotsits).
You probably want to do something more like this:
- Read everything before the comma.
- Skip over the comma.
- Read everything before the newline.
- Skip over the newline.
(And I need to stick something here for the formatting to work, for some reason.)
while (
[scanner scanUpToStringString:@"," intoString:&sNumber]
&& [scanner scanString:@"," intoString:NULL]
&& [scanner scanUpToString:@"\n" intoString:&sTitle]
&& [scanner scanString:@"\n" intoString:NULL]
) {
NSLog(@"sNumber:%@ sTitle:%@",sNumber,sTitle);
}
Assuming you're trying to parse CSV, this has its own problems:
- You probably want to treat \r\n as a newline.
- It doesn't cleanly handle blank lines or lines without a comma.
- It doesn't handle quoted strings (e.g.
"a,b","c,d,e,f"
).
精彩评论