如何在iPhone上将NSMutableArray转换为CSV文件?

时间:2010-08-09 02:15:59

标签: objective-c csv nsmutablearray

我正在编写一个包含一个函数的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 个答案:

答案 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库...它对于阅读和免费而言是免费且有用的写!

  • 创建新项目或打开现有项目
  • 将XlsxReaderWriter.xcodeproj插入项目的子项目
  • 在目标构建阶段,将XlsxReaderWriter作为目标依赖项插入
  • 将Link二进制文件中的libXlsxReaderWriter.a和libz.tbd与Libraries一起添加。较旧的系统可以使用libz.dylib而不是libz.tbd。
  • 在项目设置中的链接/其他链接器标志中添加-all_load
  • 将XlsxReaderWriter根目录路径添加到用户标头搜索路径并将其设置为递归。例如,将路径设置为&#34; $(SRCROOT)/ XlsxReaderWriter /&#34;,而不是&#34; $(SRCROOT)/ XlsxReaderWriter / XlsxReaderWriter /&#34;。

现在,您可以在代码中导入BRAOfficeDocumentPackage.h。

它还支持Swift: