Jak mohu použít NSScanner o analyzovat tabulátorem řetězec v Cocoa?

hlasů
0

Mám webovou službu, která vrací oddělený tabulátory dat (viz ukázka níže).

Musím analyzovat toto do pole nebo podobné, takže můžu vytvořit navigační pohled na to.

Podařilo se mi plnit požadavek na web a mohly analyzovat soubor XML, ale moje znalosti Objective-C je malá.

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
Položena 09/12/2008 v 15:43
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
7

Nejsem si jistý, chápu vaši formátu přesně (zobrazuje trochu divné pro mě), ale nejjednodušší způsob, jak to udělat, je with - (NSArray *)componentsSeparatedByString:(NSString *)separator, což je metoda ve třídě NSString ... Například:

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

Tento vrací NSArrayo NSStrings, jeden pro každé pole oddělený tabulátory. Pokud jsou důležité separátory nového řádku můžete použít - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator(také NSString) rozdělit pomocí více než jeden druh oddělovač.

Odpovězeno 09/12/2008 v 17:58
zdroj uživatelem

hlasů
4

Měl jsem pocit, více než plochý seznamu je chtěl. Pokud chcete, multidimenzionální struktury, kterou můžete udělat něco takového:

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.)
}
Odpovězeno 09/12/2008 v 18:13
zdroj uživatelem

hlasů
2

Jste na správné cestě s NSScanner. Budete potřebovat alespoň dva skenery: jeden pro skenování linek z celého vstupního řetězce, a jeden skener pro každý řádek. Nastavení celého vstupního skener přeskočit pouze mezery (ne nové řádky), pak:

  1. Vykreslení jednoho řádku (zdroj řetězec až do konce-of-line).
  2. Vytvořte skener a nechat ji skenovat jazýčky z řady.
  3. Počítat karty, naskenované. To je vaše úroveň odsazení.
  4. Zbytek trati je vstupní číslo a jméno. Dalo by se naskenovat linku do bílé znaky oddělit číslo a jméno, nebo nechat pohromadě, v závislosti na tom, co budete potřebovat.
  5. Vraťte se zpět ke kroku 1.

Pro konkrétní názvy metod, viz odkaz na třídu NSScanner a odkaz na třídu NSCharacterSet .

Odpovězeno 09/12/2008 v 18:15
zdroj uživatelem

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