Hi,

I'm looking for some help parsing a string from a file.

Firstly, getting the string is causing some issues. I read the String Programming Guide for Cocoa, and got this:

NSString *path = ...;
NSData *data = [NSData dataWithContentsOfFile:path];

// assuming data is in UTF8
NSString *string = [NSString stringWithUTF8String:[data bytes]];

along with a warning that you must not use:

 stringWithContentsOfFile:

So, I tried to do as I was told, but using the first example, I find that successfully getting a string from the data is quite random. When I start the application, my first attempt to load the file may or may not result and a string being created, but if not, repeatedly trying to load the file eventually works and I get the string. I'm not sure what the encoding is, (I'm trying to create a .obj reader), but setting it at UTF8 in Xcode doesn't help. So, I took a peek at the dark side, and tried the soon to be deprecated stringWithContentsOfFile: which works fine all the time. Any thoughts on why the first example might be failing randomly?

My second question is NSScanner related. Going through the .obj file, I have managed to get a system going where it scans for key characters (e.g. "v" for vertex, "#" for commented text etc). Roughly:

        while ([theScanner isAtEnd] == NO)
        {
                [theScanner scanUpToCharactersFromSet:vCharacters 
intoString:NULL];
                [theScanner scanCharactersFromSet:vCharacters 
intoString:&testString];

                if ([testString isEqualToString:@"#"]) {
                        [theScanner scanUpToString:@"\n" 
intoString:&dumpString];
                        NSLog(@"dumpString is %@", dumpString);
                }
                
                else if ([testString isEqualToString:@"o"]) {
                        [theScanner scanUpToString:@"\n" 
intoString:&theObjectName];
                        NSLog(@"name: %@", theObjectName);
                }
                
                else if ([testString isEqualToString:@"v"]) {
                        [theScanner scanFloat:&xVert];
                        [theScanner scanFloat:&yVert];
                        [theScanner scanFloat:&zVert];
NSLog(@"Vertex %i is: x = %f, y = %f, z = %f", ++i, xVert, yVert, zVert);
                }
        }               
}

However, the files also include identifiers such as "usemtl", which could appear at any time. So any ideas how you go about searching for a set of characters, and a set of strings simultaneously? i.e. how do I search for the characters without momentarily ignoring the strings or vice versa? This seems to be quite straightforward with fscanf, but it seems a bit odd going to C, when I'm trying to do this in Objective- C.

Any help with either question would be much appreciated.

Thank you,

Ian.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to