Как преобразовать NSMutableArray в файл CSV на iPhone? - PullRequest
6 голосов
/ 09 августа 2010

Я пишу приложение для iPhone, которое содержит функцию.Он может конвертировать NSMutableArray в файл CSV.Однако я не знаю, как это сделать.Может ли кто-нибудь помочь мне сделать это?Большое спасибо.

// ------ Обновление -----

Спасибо за каждый ответ.

На самом деле массив содержит объектыиз элементов, но я могу сохранить все это в массив, как показано ниже (я думаю, это проще сделать).

Массив NSMutableArray * csvArray, и массив содержит данные, как в следующем примере.

csvArray[0] = First Name
csvArray[1] = Last Name
csvArray[2] = Phone
csvArray[3] = Tom
csvArray[4] = Chan
csvArray[5] = 123
csvArray[6] = Peter
csvArray[7] = Wong
csvArray[8] = 456
csvArray[9] = Mary's
csvArray[10] = Cho"w
csvArray[11] = 789...

В начале массива есть 3 вкладки: имя, фамилия и телефон.Для данных он также содержит символ «и». Поэтому я не могу просто вырезать массив по символу «,».

Формат, который я хотел бы вывести, следующий:

//---------------------------

First Name, Last Name, Phone  // <- it have the \r\n between each row of data
Tom, Chan, 123
Peter, Wong, 456
Mary's, Cho"w, 789 ...

//---------------------------

Ответы [ 3 ]

18 голосов
/ 09 августа 2010

Анализатор CSV, который я написал (http://github.com/davedelong/CHCSVParser), может анализировать файлы CSV в NSArray из NSArrays (если вы используете категорию NSArray, включенную в код), и я просто добавил метод в категорию, чтобы взять один изэти массивы и записать его обратно в файл CSV.

Так что, если у вас есть NSArray из NSArrays, то вы можете записать его в файл CSV, например:

[myArray writeToCSVFile:myCSVFile atomically:YES];

Если не удастся, если вы не передадите NSArray из NSArrays.

edit (подсказано комментарием @ Aran к вопросу), у любого объекта внутри подмассива будет свой метод -descriptionзаписывается в файл CSV. Если вы хотите записать в файл серию объектов с различными свойствами в качестве полей строки CSV, то моя оболочка требует, чтобы свойства были помещены в массив, а затем этот массив будет составлятьстрока.

edit # 2 Я только что обновил свой анализатор CSV, чтобы преобразовать запись в свой собственный класс. Теперь вы можете делать следующее:

CHCSVWriter * csvWriter = [[CHCSVWriter alloc] initWithCSVFile:outputFile atomic:NO];
NSInteger numberOfColumns = 3;
for (NSInteger currentIndex = 0; currentIndex < [csvArray count]; currentIndex++) {
  id field = [csvArray objectAtIndex:currentIndex];
  [csvWriter writeField:field];
  if ((currentIndex % numberOfColumns) == (numberOfColumns - 1)) {
    [csvWriter writeLine];
  }
}
[csvWriter release];

Этонапишет ваш csvArray вфайл с путем outputFile, и файл будет выглядеть так:

First Name,Last Name,Phone
Tom,Chan,123
Peter,Wong,456
Mary's,"Cho""w",789
17 голосов
/ 09 августа 2010
NSString *csv = [myArray componentsJoinedByString: @","];

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

0 голосов
/ 15 января 2017

Лучший подход - использовать xlsx вместо csv ... Это просто:

Вы можете использовать XlsxReaderWriter библиотеку ... Это бесплатно и полезно для чтения и записи!

  • Создать новый проект или открыть существующий проект
  • Вставьте XlsxReaderWriter.xcodeproj в качестве подпроекта вашего проекта
  • На ваших целевых этапах сборки вставьте XlsxReaderWriter в качестве целевой зависимости
  • Добавьте libXlsxReaderWriter.a и libz.tbd в двоичный файл Link с библиотеками. Старые системы могут использовать libz.dylib вместо libz.tbd.
  • Добавьте -all_load в Linking / Other Linker Flags в настройках вашего проекта
  • Добавьте путь к корневому каталогу XlsxReaderWriter в Пути поиска по заголовкам пользователей и установите его как рекурсивный. Например, укажите путь к «$ (SRCROOT) / XlsxReaderWriter /», а не «$ (SRCROOT) / XlsxReaderWriter / XlsxReaderWriter /".

Теперь вы можете импортировать BRAOfficeDocumentPackage.h в свой код.

Также поддерживается Swift:

...