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

efterdal

macrumors newbie
Original poster
Jan 18, 2010
8
0
Hi, Everyone


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

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: 472
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
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.