【发布时间】:2009-07-21 14:32:19
【问题描述】:
我的应用程序有一个功能,可以将一些数据导出到 csv 文件,然后复制到 PC。用什么api来实现这个功能?
【问题讨论】:
我的应用程序有一个功能,可以将一些数据导出到 csv 文件,然后复制到 PC。用什么api来实现这个功能?
【问题讨论】:
你也可以这样做:
[[array componentsJoinedByString:@","] writeToFile:@"components.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL];
您可以使用这些组合来组合一个 CSV(将列名的一个数组的输出附加到值的一个数组等)。
当然,您必须小心在已经包含逗号的值周围加上引号,然后转义值中的任何引号。
【讨论】:
导出到 csv 文件通常不是很困难。正确地导入它要困难得多。
要将数据导出到 csv 文件,请执行以下操作:(伪代码)
1) 打开文件 2) 导出列名
int cnt=0;
foreach(String columnname in columns)
{
if(cnt!=0) //write the delimiter
{
file.WriteText(","); //could also be a tab delimiter
}
file.WriteText(columnName) //write columnname
cnt++;
}
3) 将所有数据写入csv
foreach(StringArray row in rows)
{
cnt=0;
foreach(String fieldValue in row)
{
if(cnt!=0) //write the delimiter
{
file.WriteText(","); //could also be a tab delimiter
}
file.WriteText(fieldValue) //write fieldvalue
cnt++;
}
}
请注意分隔符也可能是值的一部分。如果发生这种情况,完整的字段应该用双引号括起来。
【讨论】:
NSData *data=[[arr componentsJoinedByString:@","] writeToFile:@"Bhavesh.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL];
[mail addAttachmentData:data mimeType:@"text/csv" fileName:@"Bhavesh.csv"];
【讨论】:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error 方法返回 BOOL 值而不是 NSData。
这是完成这项工作的完整功能(Swift 3):
func write(theseArrays arrays: [[String]], withTheseHeaders headers: [String], toFile filename: String) {
let numCollumns = arrays.count
let numRows = arrays.first!.count
var output = "\(headers.joined(separator: ", "))\n"
for r in 0...numRows-1 {
var row = ""
for c in 0...numCollumns-1 {
row = c == 0 ? arrays[c][r] : row.appending(", \(arrays[c][r])")
}
output = output.appending("\(row)\n")
}
let localDocumentsURL = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: .userDomainMask).last
let myLocalFile = localDocumentsURL?.appendingPathComponent(filename)
guard myLocalFile != nil else {
print("----------- Couldn't create local file!")
return
}
do {
try output.write(to: myLocalFile!, atomically: true, encoding: String.Encoding.utf8)
}
catch let error as NSError {
print(error.localizedDescription)
return
}
print("Wrote CSV to: \(myLocalFile!)")
}
【讨论】: