Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

efterdal

macrumors newbie
Original poster
Hi, Everyone


I am a NOOB but are learning fast, so please speak to the dumbest person in the audience 😛

I am struggling to parse out some text from a string, the string looks like this.

MetaData: Title='Macrumors';Url='https://www.macrumors.com';
What I want is the text between ' aka just Macrumors from 'Macrumors'

Thank you in advance.
 
Hi,

I have looked at the RSS Tutorial, and think I am onto something, not quite sure. 🙂

Here is the output that is printed in the console:

MetaData: StreamTitle='Members Of Mayday - Sonic Empire';StreamUrl='http://www.radiovolum.no';

That string is separated in an Array with the pointers metaData.text and metaData2.text

What I am trying to do is to remove everything that I don't want before its printed out in the GUI.

Code:
// clean up the link - ugly formating...
metaData = [metaData stringByReplacingOccurrencesOfString:@"StreamTitle=" withString:@""];
metaData = [metaData stringByReplacingOccurrencesOfString:@"'" withString:@""];
metaData = [metaData stringByReplacingOccurrencesOfString:@"StreamUrl=" withString:@""];

Here is the code of the Array :

Code:
- (void)metaDataUpdated:(NSString *)metaData 

{
	NSArray *listItems = [metaData componentsSeparatedByString:@";"];
	
	if ([listItems count] > 0)
		metadata.text = [listItems objectAtIndex:0];
	if ([listItems count] > 1)
		metadata2.text = [listItems objectAtIndex:1];
}

Thank you everyone, I am really happy for that you guys devote time to answer my NOOB posts🙂
 
This is how you could do it using NSScanner.

Code:
NSString *string = @"StreamTitle='Members Of Mayday - Sonic Empire';StreamUrl='http://www.radiovolum.no';";
	
NSScanner *scanner = [[NSScanner alloc] initWithString:string];
NSString *title, *url;
	
[scanner scanUpToString:@"StreamTitle='" intoString:nil];
[scanner scanString:@"StreamTitle='" intoString:nil];
[scanner scanUpToString:@"'" intoString:&title];
	
[scanner scanUpToString:@"StreamUrl='" intoString:nil];
[scanner scanString:@"StreamUrl='" intoString:nil];
[scanner scanUpToString:@"'" intoString:&url];
	
NSLog(@"title = '%@', url = '%@'", title, url);
 
This is how you could do it using NSScanner.

Code:
NSString *string = metaData;
	
NSScanner *scanner = [[NSScanner alloc] initWithString:string];
NSString *title, *url;
	
[scanner scanUpToString:@"StreamTitle='" intoString:nil];
[scanner scanString:@"StreamTitle='" intoString:nil];
[scanner scanUpToString:@"'" intoString:&title];
	
[scanner scanUpToString:@"StreamUrl='" intoString:nil];
[scanner scanString:@"StreamUrl='" intoString:nil];
[scanner scanUpToString:@"'" intoString:&url];
	
NSLog(@"title = '%@', url = '%@'", title, url);

I manage to get the clean metadata to print out to the console, but I can't get it to be viewed to my UILabel's.


I get this error now :

attachment.php
 

Attachments

  • meta.png
    meta.png
    58.5 KB · Views: 486
The problem is that you are already using a variable called metaDataTitle in your class (it looks like it's a UILabel). You need to change the name of the local NSString variable to something else. The second error is simply because you're not passing a string anymore - you're passing the UILabel...which won't work.
 
The problem is that you are already using a variable called metaDataTitle in your class (it looks like it's a UILabel). You need to change the name of the local NSString variable to something else. The second error is simply because you're not passing a string anymore - you're passing the UILabel...which won't work.

Do you mean something like this? :

Code:
- (void)metaDataUpdated:(NSString *)metaData

{

	NSArray *listItems = [metaData componentsSeparatedByString:@";"];
	
	if ([listItems count] > 0)
		metadata.text = [listItems objectAtIndex:0];
	if ([listItems count] > 1)
		metadata2.text = [listItems objectAtIndex:1];
	
	NSString *cleanMeta = metaData;
	NSScanner *scanner = [[NSScanner alloc] initWithString:cleanMeta];

	[scanner scanUpToString:@"StreamTitle='" intoString:nil];
	[scanner scanString:@"StreamTitle='" intoString:nil];
	[scanner scanUpToString:@"'" intoString:&cleanMeta];
	
	NSLog(@"%@", cleanMeta);
}
 
Your method is receiving a variable called metadata which is an NSString. NSString doesn't have a property called text. So this will not work.

I think you need to work out what is a UILabel and what is an NSString as you're confusing the two. I find that naming my variables so that it's easy to find out what they are helps - for example metaDataLabel.
 
Your method is receiving a variable called metadata which is an NSString. NSString doesn't have a property called text. So this will not work.

I think you need to work out what is a UILabel and what is an NSString as you're confusing the two. I find that naming my variables so that it's easy to find out what they are helps - for example metaDataLabel.

Yes, Indeed. I am quite confused, but the output in the cosole is right, so somthing right happens 🙂

Code:
- (void)metaDataUpdated:(NSString *)metaData

{

	NSArray *listItems = [metaData componentsSeparatedByString:@";"];
	
	if ([listItems count] > 0)
		metadata.text = [listItems objectAtIndex:0];
	if ([listItems count] > 1)
		metadata2.text = [listItems objectAtIndex:1];


	NSScanner *scanner = [[NSScanner alloc] initWithString:metaData];
	
	[scanner scanUpToString:@"StreamTitle='" intoString:nil];
	[scanner scanString:@"StreamTitle='" intoString:nil];
	[scanner scanUpToString:@"'" intoString:&metaData];
	
	
	NSLog(@"%@", metaData);
}

Code:
2010-01-25 17:00:10.787 RadioVolum.no[41822:600f] MetaData: StreamTitle='Mark Knight, Adam K, Soha - From The Speaker - Original Dub Mix';StreamUrl='http://www.radiovolum.no';
2010-01-25 17:00:10.787 RadioVolum.no[41822:207] Mark Knight, Adam K, Soha - From The Speaker - Original Dub Mix
 
So, your parameter is named metaData and you have an ivar named metadata? That's seems confusing.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.