Cum pot utiliza NSScanner pentru a analiza un șir delimitat în filă de cacao?

voturi
0

Am un serviciu web care returnează date delimitate prin tabulatori (a se vedea mai jos un exemplu).

Am nevoie pentru a analiza acest lucru într-o matrice sau similar, astfel că pot crea o imagine de navigare a acestuia.

Am reușit să efectueze cererea de web și ar putea analiza un fișier XML, dar cunoștințele mele de Objective-C este mic.

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
Întrebat 09/12/2008 la 15:43
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
7

Nu sunt sigur că înțeleg formatul exact (afișează un pic ciudat pentru mine) , dar cel mai simplu mod de a face acest lucru este , with - (NSArray *)componentsSeparatedByString:(NSString *)separatorcare este o metodă în clasa NSString ... exemplu:

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

Aceasta returnează o NSArrayde NSStrings, câte unul pentru fiecare câmp delimitat prin tab-uri. În cazul separatoarelor nou-linie sunt importante , puteți utiliza - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator( de asemenea , pe NSString) , pentru a împărți , folosind mai mult de un tip de delimitator.

Publicat 09/12/2008 la 17:58
sursa de către utilizator

voturi
4

Am avut un sentiment mai mult decât o listă de plat este dorit. Dacă doriți o structură multidimensională poți să faci ceva de genul:

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.)
}
Publicat 09/12/2008 la 18:13
sursa de către utilizator

voturi
2

Ești pe drumul cel bun cu NSScanner. Vei avea nevoie de cel puțin două scanere: One pentru a scana liniile din întregul șir de intrare, și un scanner pentru fiecare linie. Setați scanerul întreg-intrare pentru a sări peste doar spații albe (nu rânduri libere), atunci:

  1. Scanare o singură linie (string sursă până la sfârșit de linie).
  2. Creați un scaner și să-l scanați file de pe linie.
  3. Contorizarea filele scanate. Asta e nivelul tău de indentare.
  4. Restul liniei este numărul de intrare și numele. Ai putea scana linia de până la whitespace sunt pentru a separa numărul și numele, sau lăsați-le împreună, în funcție de ceea ce ai nevoie.
  5. Du-te înapoi la pasul 1.

Pentru nume specifice metode, vezi referința de clasă NSScanner și referința clasa NSCharacterSet .

Publicat 09/12/2008 la 18:15
sursa de către utilizator

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