Wie kann ich NSScanner verwenden, um eine Registerkarte getrennte Zeichenfolge in Cocoa zu analysieren?

stimmen
0

Ich habe einen Web-Service, die Tabulator getrennte Daten zurückgibt (siehe Beispiel unten).

Ich brauche dies in ein Array oder ähnliches zu analysieren, damit ich eine Navigationsansicht davon erstellen kann.

Ich habe es geschafft, die Web-Anfrage auszuführen und könnte eine XML-Datei, aber mein Wissen über Objective-C ist klein analysieren.

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
Veröffentlicht am 09/12/2008 um 15:43
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
7

Ich bin mir nicht sicher , ob ich Ihr Format genau verstehen (es mir ein wenig seltsam zeigt) , aber der einfachste Weg , dies zu tun , with - (NSArray *)componentsSeparatedByString:(NSString *)separatorist ein Verfahren , in dem NSString Klasse ... Beispiel:

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

Dies liefert eine NSArrayvon NSStrings, eine für jedes getabulatortrennte Feld. Wenn die neuen Online-Separatoren wichtig sind , können Sie verwenden - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator(auch NSString) zu teilen mehr als eine Art von Trennzeichen verwendet.

Beantwortet am 09/12/2008 um 17:58
quelle vom benutzer

stimmen
4

Ich hatte eine mehr als eine einfache Liste fühlt wollte. Wenn Sie eine multidimensionale Struktur wollen, können Sie etwas tun:

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.)
}
Beantwortet am 09/12/2008 um 18:13
quelle vom benutzer

stimmen
2

Du bist auf dem richtigen Weg mit NSScanner. Sie werden mindestens zwei Scanner benötigen: Eine Zeile aus dem gesamten Eingabestring zu scannen, und ein Scanner für jede Zeile. Stellen Sie den Voll Eingabeabtasterträger nur Leerzeichen überspringen (nicht Zeilenumbrüche), dann gilt:

  1. Scannen eine Zeile (Quellzeichenfolge bis zum End-of-line).
  2. Erstellen Sie einen Scanner und haben es scannen Registerkarten aus der Leitung.
  3. Zählen Sie die Registerkarten, die Sie gescannt. Das ist Ihre Einrückungsebene.
  4. Der Rest der Zeile ist die Eintragsnummer und Name. Sie konnten die Linie scannen die Nummer und den Namen Leerzeichen zu trennen, oder sie zusammen lassen, je nachdem, was Sie brauchen.
  5. Gehen Sie zurück zu Schritt 1.

Für spezifische Methodennamen finden Sie die NSScanner Klassenreferenz und die NSCharacterSet Klassenreferenz .

Beantwortet am 09/12/2008 um 18:15
quelle vom benutzer

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