我正在编写一个包含一个函数的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 ...
//---------------------------
答案 0 :(得分:18)
我编写的CSV解析器(http://github.com/davedelong/CHCSVParser)可以将CSV文件解析为NSArray的NSArray(如果你使用代码中包含的NSArray类别),我只是在类别中添加了一个方法那些数组并将其写回CSV文件。
因此,如果您有NSArray
NSArrays
,那么您可以将其写入CSV文件,如下所示:
[myArray writeToCSVFile:myCSVFile atomically:YES];
如果你没有通过NSArray的NSArray,那么优雅地会失败。
编辑(由@Aran对该问题的评论提示)子阵列中的任何对象都将其-description
方法写入CSV文件。如果要将一系列对象写入文件,并将各种属性作为CSV行的字段,那么我的包装器要求将属性放在一个数组中,然后该数组将构成该行。
编辑#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
答案 1 :(得分:17)
NSString *csv = [myArray componentsJoinedByString: @","];
但请注意,这不会解释数组元素中的逗号。您将需要为此定义一些转义/转义技术,这完全取决于您。
答案 2 :(得分:0)
更好的方法是使用xlsx而不是csv ...很容易:
您可以使用XlsxReaderWriter库...它对于阅读和免费而言是免费且有用的写!
现在,您可以在代码中导入BRAOfficeDocumentPackage.h。
它还支持Swift: