Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting single values from a parsed NSString in objective-c

These are my sample NSStrings (parsed into an array), simplified.

The single string object is parsed like "STRING1, STRING2 then DATE TIME then - A:VALUE", ex:

The name of first value, first 17/04/2013 11:30:00 - A:30.0 // sometimes there is a comma after first string
The name of second value 17/04/2013 11:00:00 - A:20.0 // sometimes there is NOT a comma after first string
Name of third value 17/04/2013 10:30:00 - A:40.0
Fourth 17/04/2013 09:40:00 - A:50.0
Fifth value 17/04/2013 05:00:00 - A:10.0

Well, I need to extract the separate values of STRING or STRING, STRING:

The name of first value, first
The name of second value
Name of third value
Fourth
Fifth value

then DATE and TIME

17/04/2013 11:30:00
17/04/2013 11:00:00
17/04/2013 10:30:00
17/04/2013 09:40:00
17/04/2013 05:00:00

finally, the single VALUES:

30.0
20.0
40.0
50.0
10.0

EDIT: I'm trying to use a code from Martin R for my parsed *allValues:

The *allValues array is something like: 
    (
        "The name of first value, first 17/04/2013 11:30:00 - A:30.0",
        "The name of second value 17/04/2013 11:00:00 - A:20.0",
        "Name of third value 17/04/2013 10:30:00 - A:40.0",
        "Fourth 17/04/2013 09:40:00 - A:50.0",
        "Fifth value 17/04/2013 05:00:00 - A:10.0"
    )

and here is the code to extract single values:

NSMutableArray *allValues = [parsedFeed valueForKey:@"values"];

for (int i=1; i < [allValues count]; i++) {
    NSString *string = [allValues objectAtIndex:i];
    NSString *pattern = @"(.*) (\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}:\\d{2}) - A:(.*)";
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
    NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];

    if (match != nil) {
    NSString *s1 = [string substringWithRange:[match rangeAtIndex:1]];
    NSString *s2 = [string substringWithRange:[match rangeAtIndex:2]];
    NSString *s3 = [string substringWithRange:[match rangeAtIndex:3]];
    NSLog(@"First part:  %@", s1);
    NSLog(@"Second part: %@", s2);
    NSLog(@"Third part:  %@", s3);
    }
}

But in this case I cannot get any NSLog result (match == nil). What's happened? Thanks!

like image 556
Huxley Avatar asked Apr 17 '13 11:04

Huxley


People also ask

What is NSString in Objective-C?

NSString is one the most commonly used classes that is used for storing strings and texts. If you want to know more about NSString, please refer NSString in Objective-C strings.

What is the difference between NSString and nscharacterset?

If you want to know more about NSString, please refer NSString in Objective-C strings. As mentioned earlier, NSCharacterSet represents various groupings of characters that are used by the NSString and NSScanner classes.

What is nscharacterset in Java?

As mentioned earlier, NSCharacterSet represents various groupings of characters that are used by the NSString and NSScanner classes. Here is the set of methods available in NSCharacterSet which represent the various character sets.

What are the methods available in nscharacterset?

Here is the set of methods available in NSCharacterSet which represent the various character sets. alphanumericCharacterSet − Returns a character set containing the characters in the categories Letters, Marks, and Numbers. capitalizedLetterCharacterSet − Returns a character set containing the characters in the category of Titlecase Letters.


1 Answers

If the DATE/TIME has a fixed format, you can use a regular expression:

NSString *string = @"The name of first value, first 17/04/2013 11:30:00 - A:30.0";
NSString *pattern = @"(.*) (\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}:\\d{2}) - A:(.*)";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                       options:0 error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
if (match != nil) {
    NSString *s1 = [string substringWithRange:[match rangeAtIndex:1]];
    NSString *s2 = [string substringWithRange:[match rangeAtIndex:2]];
    NSString *s3 = [string substringWithRange:[match rangeAtIndex:3]];
    NSLog(@"First part:  %@", s1);
    NSLog(@"Second part: %@", s2);
    NSLog(@"Third part:  %@", s3);
}

Output:

First part:  The name of first value, first
Second part: 17/04/2013 11:30:00
Third part:  30.0
like image 105
Martin R Avatar answered Nov 01 '22 18:11

Martin R