2009-07-21 2 views
6

Мое приложение имеет функцию, которая может экспортировать некоторые данные в файл csv, а затем скопировать на ПК. Я не уверен, что api использовать для реализации этой функции. Кто-нибудь знает об этом? Заранее спасибо.Как экспортировать данные в файл csv с iPhone SDK 3.0?

ответ

2

Экспортировать в файл 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++; 
     } 
} 

Остерегайтесь того факта, что разделитель также может быть частью значения. Если это произойдет, полное поле должно быть заключено в двойные кавычки.

+0

Там отличный способ избежать символов-разделителей в этом репо: http://bitbucket.org/fourplusone/fourcsv –

11

Вы также можете сделать что-то вроде:

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

Вы можете использовать комбинации этого собрать CSV (добавить вывод одного массива для имен столбцов в один массив для значений, и т.д.).

Конечно, вы должны быть осторожны, чтобы помещать кавычки вокруг значений, которые уже содержат запятую, и затем избегать любых кавычек в значении.

+1

Что мне делать, если я хочу преобразовать таблицу базы данных в файл csv. Поэтому, если пользователь открывает файл в листе excel, он может просмотреть элемент в форме таблицы – 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 *) путь атомарно: (BOOL) useAuxiliaryFile encoding: (NSStringEncoding) enc error: (NSError * *) метод error' возвращает значение 'BOOL', а не' NSData'. – TheTiger

0

Вот полная функция, которая делает работу (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!)") 

} 
Смежные вопросы