Как использовать NSScanner для анализа строки с разделителями табуляции в Какао? - PullRequest
0 голосов
/ 09 декабря 2008

У меня есть веб-сервис, который возвращает данные с разделителями табуляции (см. Пример ниже).

Мне нужно разобрать это в массив или аналогичный, чтобы я мог создать его навигационное представление.

Мне удалось выполнить веб-запрос и я мог разобрать файл XML, но мои знания Objective-C невелики.

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

Ответы [ 3 ]

7 голосов
/ 09 декабря 2008

Я не уверен, что точно понимаю ваш формат (он выглядит немного странно), но самый простой способ сделать это - with - (NSArray *)componentsSeparatedByString:(NSString *)separator, который является методом в классе NSString ... пример:

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

Возвращает NSArray из NSStrings, по одному для каждого поля, разделенного табуляцией. Если разделители новой строки важны, вы можете использовать - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator (также на NSString) для разделения, используя более одного вида разделителя.

4 голосов
/ 09 декабря 2008

У меня было чувство, что не хватает простого списка. Если вам нужна многомерная структура, вы можете сделать что-то вроде этого:

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.)
}
2 голосов
/ 09 декабря 2008

Вы на правильном пути с NSScanner. Вам понадобится как минимум два сканера: один для сканирования строк из всей входной строки и один сканер для каждой строки. Настройте сканер с полным вводом так, чтобы он пропускал только пробелы (не переводы строк), а затем:

  1. Сканирование одной строки (от исходной строки до конца строки).
  2. Создайте сканер и сделайте так, чтобы он сканировал вкладки из линии.
  3. Подсчитайте количество отсканированных вами вкладок. Это ваш уровень отступа.
  4. Остальная часть строки - это номер записи и имя. Вы можете отсканировать строку до пробела, чтобы разделить номер и имя, или оставить их вместе, в зависимости от того, что вам нужно.
  5. Вернитесь к шагу 1.

Для конкретных имен методов см. ссылку на класс NSScanner и ссылку на класс NSCharacterSet .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...