2009-07-21 3 views

Trả lời

2

Xuất sang tệp csv thường không quá khó. Nhập khẩu nó là phức tạp hơn nhiều để làm một cách chính xác.

để xuất dữ liệu vào một tập tin csv làm như sau: (giả)

1) mở tập tin 2) tên cột xuất khẩu

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) viết tất cả các dữ liệu vào 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++; 
     } 
} 

hãy cẩn thận với thực tế là dấu phân cách cũng có thể là một phần của giá trị. Nếu điều này xảy ra, trường hoàn chỉnh phải được đặt trong dấu ngoặc kép.

+0

Có một cách tuyệt vời để thoát khỏi nhân vật delimiter tại repo này: http://bitbucket.org/fourplusone/fourcsv –

11

Bạn cũng có thể làm điều gì đó như:

[[array componentsJoinedByString:@","] writeToFile:@"components.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

Bạn có thể sử dụng kết hợp này để đặt lại với nhau một CSV (thêm đầu ra của một mảng cho các tên cột để một mảng cho các giá trị, vv).

Tất nhiên, bạn phải cẩn thận để đặt dấu ngoặc kép xung quanh các giá trị đã chứa dấu phẩy và sau đó thoát khỏi bất kỳ dấu ngoặc kép nào trong giá trị.

+1

Tôi nên làm gì nếu tôi muốn chuyển bảng cơ sở dữ liệu thành tệp csv. Vì vậy, nếu người dùng mở tệp trong bảng excel, anh ta có thể xem mục trong biểu mẫu bảng – Warrior

0
NSData *data=[[arr componentsJoinedByString:@","] writeToFile:@"Bhavesh.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
[mail addAttachmentData:data mimeType:@"text/csv" fileName:@"Bhavesh.csv"]; 
+0

'- (BOOL) writeToFile: (NSString *) đường dẫn nguyên tử: (BOOL) useAuxiliaryFile encoding: (NSStringEncoding) enc error: (NSError * *) phương thức error' trả về giá trị 'BOOL' không phải' NSData'. – TheTiger

0

Đây là một chức năng đầy đủ mà không được công việc (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!)") 

}