如何将iPhone上的NSMutableArray转换为CSV文件?
我在写一个iPhone应用程序,它包含一个函数。它可以将NSMutableArray转换为CSV文件。但是,我不知道该怎么做。任何人都可以帮助我做到这一点?非常感谢你。如何将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 ...
//---------------------------
的CSV分析器我写的(http://github.com/davedelong/CHCSVParser )可以将CSV文件解析为NSArray的NSArray(如果使用的话)包含在代码中的NSArray类别),并且我只是在该类别中添加了一个方法来获取这些数组中的一个并将其写回CSV文件。
所以,如果你有NSArrays
的NSArray
,那么你可以把它写入一个CSV文件是这样的:
[myArray writeToCSVFile:myCSVFile atomically:YES];
如果,如果你不通过NSArrays的一个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
NSString *csv = [myArray componentsJoinedByString: @","];
但要注意,这将不考虑数组的元素中的逗号。您需要定义一些转义/转义技术,而这完全取决于你做的。
更好的方法是使用XLSX,而不是CSV。 ..很容易:
您可以使用XlsxReaderWriter库...它是免费的,有用的阅读&写!
- 创建一个新的项目或打开现有项目
- 插入XlsxReaderWriter.xcodeproj作为项目的一个子项目
- 在你的目标构建阶段插入XlsxReaderWriter作为目标依赖
- 添加libXlsxReaderWriter.a和链接二进制库中的libz.tbd。较老的系统可以使用libz.dylib而不是libz.tbd。
- 在项目设置中的链接/其他链接器标志中添加-all_load
- 将XlsxReaderWriter根目录路径添加到用户标题搜索路径并将其设置为递归。例如,将路径设置为“$(SRCROOT)/ XlsxReaderWriter /”,而不是“$(SRCROOT)/ XlsxReaderWriter/XlsxReaderWriter /”。
现在,您可以在代码中导入BRAOfficeDocumentPackage.h。
它也支持Swift:
没有足够的信息来回答。我们需要知道数组中的内容。您希望输出CSV格式的格式。 – 2010-08-09 02:18:36
@Aran“您希望输出CSV格式的格式”?你意识到CSV *是一种格式,对吧? – 2010-08-09 03:26:47
@Dave:如果数组是一个具有多个字段的复杂对象的数组,而不仅仅是字符串,那么怎么办?例如:具有给定名称,姓氏,出生日期等的Person类的数组....“我是否意识到CSV是一种格式”...是的,我确实,CSV通过逗号分隔来定义伪列,所以什么格式=>文件中的列/字段.. – 2010-08-09 05:11:21