Hoe gebruik ik NSScanner om een ​​tab gescheiden tekenreeks in Cocoa ontleden?

stemmen
0

Ik heb een webdienst die tabs gescheiden gegevens worden geretourneerd (zie voorbeeld hieronder).

Ik moet parsen in een matrix of dergelijke zodat ik navigatiebeeld ervan kan maken.

Ik ben erin geslaagd om het web verzoek te doen en kon een XML-bestand te ontleden, maar mijn kennis van Objective-C is klein.

433 Eat
    502 Not Fussed
    442 British
    443 Chinese
    444 Dim Sum
    445 Fish
    446 French
    447 Gastropubs
    449 Indian
    451 Italian
    452 Japanese
    453 Middle Eastern
    454 Pan-Asian
    455 Pizza
    456 Spanish
    457 Tapas
    458 Thai
    459 Vegetarian
434 Drink
    501 Not Fussed
    460 Bars 
    461 Pubs
De vraag is gesteld op 09/12/2008 om 15:43
bron van user
In andere talen...                            


3 antwoorden

stemmen
7

Ik weet niet of ik begrijp uw formaat precies (het toont een beetje vreemd voor mij), maar de makkelijkste manier om dit te doen is with - (NSArray *)componentsSeparatedByString:(NSString *)separatordat een methode in de NSString klasse ... Bijvoorbeeld:

NSArray *components = [myString componentsSeperatedByString:@"\t"];

Dit brengt een NSArrayvan NSStrings, één voor elke tabs veld. Als de nieuwe-lijn afscheiders zijn belangrijk die u kunt gebruiken - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator(ook NSString) op te splitsen met behulp van meer dan één soort scheidingsteken.

antwoordde op 09/12/2008 om 17:58
bron van user

stemmen
4

Ik had een gevoel meer dan een platte lijst wordt gezocht. Als u een multidimensionale structuur wilt, kun je zoiets als dit:

NSArray *lines = [data componentsSeparatedByString:@"\n"];
for (NSString *line in lines) {
    NSArray *fields = [line componentsSeparatedByString:@"\t"];
     // Do something here with each two-element array, such as add to an NSDictionary or to an NSArray (to make a multidimensional array.)
}
antwoordde op 09/12/2008 om 18:13
bron van user

stemmen
2

Je bent op de goede weg met NSScanner. U zult minstens twee scanners nodig: Eén tot lijnen scannen vanuit de hele input string, en een scanner voor elke lijn. Stel de gehele ingangen scanner alleen spatie (niet newlines) slaan, dan:

  1. Scan een lijn (bronstring tot eind-van-lijn).
  2. Maak een scanner en laat het scannen tabs van de lijn.
  3. Tel de tabbladen die u gescand. Dat is uw inspringniveau.
  4. De rest van de lijn is het instapmodel nummer en de naam. Je kon de lijn te trekken tot aan witruimte om het nummer en de naam te scheiden, of laat ze samen, afhankelijk van wat je nodig hebt.
  5. Ga terug naar stap 1.

Voor specifieke methode namen, zie de NSScanner klasse referentie en de NSCharacterSet klasse referentie .

antwoordde op 09/12/2008 om 18:15
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more