Come si usa NSScanner di analizzare una stringa delimitata scheda in Cocoa?

voti
0

Ho un servizio web che restituisce i dati delimitato da tabulazioni (vedi esempio sotto).

Ho bisogno di analizzare questo in un array o simili in modo da poter creare una vista di navigazione di esso.

Sono riuscito a eseguire la richiesta web e in grado di analizzare un file XML, ma la mia conoscenza di Objective-C è di piccole dimensioni.

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
È pubblicato 09/12/2008 alle 15:43
fonte dall'utente
In altre lingue...                            


3 risposte

voti
7

Io non sono sicuro di aver capito il formato esattamente (visualizza un po 'strano per me), ma il modo più semplice per farlo è with - (NSArray *)componentsSeparatedByString:(NSString *)separatorche è un metodo nella classe NSString ... esempio:

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

Questo restituisce una NSArraydi NSStrings, uno per ogni campo delimitato da tabulazioni. Se i separatori di nuova riga sono importanti è possibile utilizzare - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator(anche NSString) per dividere utilizzando più di un tipo di delimitatore.

Risposto il 09/12/2008 a 17:58
fonte dall'utente

voti
4

Ho avuto una sensazione più di una semplice lista è voluto. Se si desidera una struttura multidimensionale che si può fare qualcosa di simile a questo:

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.)
}
Risposto il 09/12/2008 a 18:13
fonte dall'utente

voti
2

Sei sulla strada giusta con NSScanner. Avrete bisogno di almeno due scanner: uno per le linee di scansione da tutta la stringa di input, e uno scanner per ogni linea. Impostare lo scanner intera ingresso per saltare solo spazi bianchi (non a capo), quindi:

  1. Scansione di una linea (stringa sorgente fino a end-of-line).
  2. Creare uno scanner e lo hanno scansione schede dalla linea.
  3. Contare le schede scansite. Questo è il tuo livello di indentazione.
  4. Il resto della linea è il numero della voce e il nome. Si potrebbe eseguire la scansione della linea fino a spazi bianchi per separare il numero e il nome, o lasciarli insieme, a seconda di quello che ti serve.
  5. Tornare al passaggio 1.

Per i nomi dei metodi specifici, vedere il riferimento di classe NSScanner e il riferimento di classe NSCharacterSet .

Risposto il 09/12/2008 a 18:15
fonte dall'utente

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