Как преобразовать данные в формат CSV или HTML в iOS?

В моем приложении iOS мне нужно экспортировать некоторые данные в формат CSV или HTML. Как я могу это сделать?

RegexKitLite поставляется с примером того, как читать файл csv в NSArray из NSArrays, и идти в обратном направлении довольно тривиально.

Это будет что-то вроде этого (предупреждение: код, введенный в браузере):

NSArray * data = ...; //An NSArray of NSArrays of NSStrings NSMutableString * csv = [NSMutableString string]; for (NSArray * line in data) { NSMutableArray * formattedLine = [NSMutableArray array]; for (NSString * field in line) { BOOL shouldQuote = NO; NSRange r = [field rangeOfString:@","]; //fields that contain a , must be quoted if (r.location != NSNotFound) { shouldQuote = YES; } r = [field rangeOfString:@"\""]; //fields that contain a " must have them escaped to "" and be quoted if (r.location != NSNotFound) { field = [field stringByReplacingOccurrencesOfString:@"\"" withString:@"\"\""]; shouldQuote = YES; } if (shouldQuote == YES) { [formattedLine addObject:[NSString stringWithFormat:@"\"%@\"", field]]; } else { [formattedLine addObject:field]; } } NSString * combinedLine = [formattedLine componentsJoinedByString:@","]; [csv appendFormat:@"%@\n", combinedLine]; } [csv writeToFile:@"/path/to/file.csv" atomically:NO]; 

Общее решение – использовать stringWithFormat: для форматирования каждой строки. Предположительно, вы пишете это в файл или сокет, и в этом случае вы должны написать представление данных каждой строки (см. dataUsingEncoding: в дескриптор файла при его создании.

Если вы форматируете много строк, вы можете использовать initWithFormat: и явные сообщения о release , чтобы избежать нехватки памяти, нагромождая слишком много строковых объектов в пуле автозаполнения.

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

Эвакуация (наряду с unescaping) – действительно хорошая вещь для написания модульных тестов. Напишите функцию в CSV-формат в одну строку и проверите тестовые примеры, которые сравнивают его результат с целью исправления вывода. Если у вас есть синтаксический анализатор CSV, или вам это понадобится, или просто хотите убедиться, что ваше экранирование верное, напишите единичные тесты для разбора и отмены, а также экранирование и форматирование.

Если вы можете начать с одной записи, содержащей любую комбинацию специальных символов CSV и / или SQL, отформатировать ее, проанализировать форматированную строку и в итоге записать запись, равную той, с которой вы начали, вы знаете, что ваш код хорошо.

(Все вышеперечисленное относится в равной степени к CSV и HTML. Если возможно, вы можете использовать XHTML, чтобы вы могли использовать инструменты проверки XML и парсеры, включая NSXMLParser.)

CSV – значения, разделенные запятыми.

Обычно я просто перебираю структуры данных в своем приложении и выводю один набор значений на строку, значения внутри набора разделяются запятой.

 struct person { string first_name; string second_name; }; person tony = {"tony", "momo"}; person john = {"john", "smith"}; 

будет выглядеть

 tony, momo john, smith 
  • Добавление события Click на InfoWindow / Marker в SDK Google Maps для родной iOS / цели C
  • Удаление пропусков не работает на TableVIewCell?
  • Ошибка Dropbox DropboxSDK: запрос на создание ошибки / 1 / files / sandbox
  • Какая причина аварии - «info.serviceProcessAssertion is nil»?
  • Минимальный размер шрифта UILabel
  • Являются ли коды статуса HTTP в любом месте SDK iOS?
  • iOS SecTrustRef Always NULL
  • Как проверить, активировал ли пользователь push-уведомление из настроек?
  • Наложение изображения на другое изображение в iOS
  • DropboxSDK: невозможно связать
  • Передача информации между делегатами по ObjectiveC
  • Давайте будем гением компьютера.