Swift CSV作成
Swiftで、Arrayから、CSV形式のStringを生成するコードを作成しました。
使い方は、headerに行の項目名などをCSV形式で指定し、arrayにCSVにしたいデータを指定して、コールすると返り値がCSV形式のStringとなります。
ただし、Swiftは内部的に文字コードはUnicodeなので、出力するときは、dataUsingEncoding(NSShiftJISStringEncoding)のメソッドで、S-JISに変換してください。
struct MakeCSV { static func MakeCSV(header:String, array:AnyObject, footer:String)->String{ var csv:String = "" let maxindex1st = array.count-1 for(var i=0;i<=maxindex1st;i++){ let row = array[i] var rowcsv :String = "" let maxindex2nd = row.count-1 for(var j=0;j<=maxindex2nd;j++){ if j != 0 {rowcsv = rowcsv + ","}//2列目以降は、先頭にコンマをつける var str:String = "" if(row[j] is String || row[j] is NSString){ //文字列の場合 //改行コードをCR+LFに str = (row[j] as! String).stringByReplacingOccurrencesOfString("\r\n", withString:"\n", options: NSStringCompareOptions.RegularExpressionSearch, range: nil) str = str.stringByReplacingOccurrencesOfString("[\r\n]", withString:"\r\n", options: NSStringCompareOptions.RegularExpressionSearch, range: nil) //ダブルコーテーションをエスケープ str = str.stringByReplacingOccurrencesOfString("\"", withString:"\"\"", options: NSStringCompareOptions.RegularExpressionSearch, range: nil) }else if(row[j] is NSDate){ //日付の場合 let dateFormatter = NSDateFormatter() dateFormatter.locale = NSLocale(localeIdentifier: "ja_JP") dateFormatter.timeStyle = .MediumStyle dateFormatter.dateStyle = .MediumStyle str = dateFormatter.stringFromDate(row[j] as! NSDate) as String }else if(row[j] is NSNumber){ //NSNumberの場合 str = (row[j] as! NSNumber).stringValue } if str != "" { rowcsv = rowcsv + "\"" + str + "\"" } } csv = csv + rowcsv + "\r\n" } return header + "\r\n" + csv + footer } }