Я пишу приложение для 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 ...
//---------------------------
Парсер 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
NSString *csv = [myArray componentsJoinedByString: @","];
Но учтите, что при этом не учитываются запятые в элементах массива. Для этого вам нужно будет определить некоторую технику экранирования / отмены экранирования, и это полностью зависит от вас.