Jak używać NSScanner do analizowania znakami tabulacji ciąg w kakao?

głosy
0

Mam usługi sieci web, która zwraca kartę ograniczone dane (patrz próbka poniżej).

Muszę przeanalizować to pod tablicą lub podobny, więc mogę utworzyć widok nawigacji z nim.

Udało mi się wykonać żądania internetową i może przetworzyć pliku XML, ale moja znajomość Objective-C jest niewielka.

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
Utwórz 09/12/2008 o 15:43
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
7

Nie jestem pewien, czy rozumiem format dokładnie (wyświetla się trochę dziwne dla mnie), ale najprostszym sposobem, aby to zrobić, to with - (NSArray *)componentsSeparatedByString:(NSString *)separatorco jest metoda w klasie NSString ... przykład:

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

Ta zwraca NSArrayod NSStrings, po jednym dla każdego pola rozdzielany tabulatorami. Jeśli separatory new-line są ważne, można użyć - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator(również NSString) do podziału za pomocą więcej niż jednego rodzaju separatora.

Odpowiedział 09/12/2008 o 17:58
źródło użytkownik

głosy
4

Miałem uczucie ponad płaskiej listy jest poszukiwany. Jeśli chcesz wielowymiarową strukturę można zrobić coś takiego:

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.)
}
Odpowiedział 09/12/2008 o 18:13
źródło użytkownik

głosy
2

Jesteś na dobrej drodze z NSScanner. Będziesz potrzebował co najmniej dwóch skanerów: Jedno skanowanie linii z całego ciągu wejściowego, a jeden skaner dla każdej linii. Ustaw skaner całego wejściowego pominąć tylko spacje (nie nowe linie), a następnie:

  1. Przeskanowania jednego wiersza (źródło ciąg do end-of-line).
  2. Tworzenie skanera i mieć go zeskanować karty z linii.
  3. Policz kart zeskanowane. To twój poziom wcięcia.
  4. Reszta linii jest pozycja numer i nazwa. Można skanować linię do białych znaków oddzielić numer i nazwę, albo zostawić je razem, w zależności od tego, co trzeba.
  5. Wróć do kroku 1.

Dla konkretnych nazw metod, zobacz klasę odniesienie NSScanner i odniesienie klasy NSCharacterSet .

Odpowiedział 09/12/2008 o 18:15
źródło użytkownik

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