Как экспортировать данные в CSV-файл с iOS? - PullRequest
6 голосов
/ 21 июля 2009

Мое приложение имеет функцию, которая может экспортировать некоторые данные в CSV-файл, а затем скопировать на ПК. Какой API-интерфейс использовать для реализации этой функции?

Ответы [ 4 ]

11 голосов
/ 21 июля 2009

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

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

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

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

2 голосов
/ 21 июля 2009

Экспорт в 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 голосов
/ 18 января 2017

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

}
0 голосов
/ 16 февраля 2013
NSData *data=[[arr componentsJoinedByString:@","] writeToFile:@"Bhavesh.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL];
[mail addAttachmentData:data mimeType:@"text/csv" fileName:@"Bhavesh.csv"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...