Как преобразовать массив NSMutableArray в Файл CSV на iPhone?

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

// ------ Update -----

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

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

Массив 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 ...

//---------------------------
6
задан Questions 9 August 2010 в 09:51
поделиться

2 ответа

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

Так что если у вас есть NSArray из NSArray, то вы можете записать его в CSV-файл следующим образом:

[myArray writeToCSVFile:myCSVFile atomically:YES];

If будет изящно провален, если вы не передадите NSArray из NSArray.

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
18
ответ дан 8 December 2019 в 02:34
поделиться
NSString *csv = [myArray componentsJoinedByString: @","];

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

17
ответ дан 8 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: