Как использовать NSScanner для разбора строки с разделителями табуляции в какао?

голоса
0

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

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

Я сумел выполнить веб-запрос и могу разобрать файл 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
Задан 09/12/2008 в 15:43
источник пользователем
На других языках...                            


3 ответов

голоса
7

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

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

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

Ответил 09/12/2008 в 17:58
источник пользователем

голоса
4

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

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.)
}
Ответил 09/12/2008 в 18:13
источник пользователем

голоса
2

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

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

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

Ответил 09/12/2008 в 18:15
источник пользователем

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