2009-07-21 1 views

Antwort

2

Exportieren in eine CSV-Datei ist in der Regel nicht sehr schwierig. Es ist viel schwieriger, es zu importieren.

Daten in eine CSV-Datei zu exportieren, gehen Sie wie folgt vor: (Pseudo-Code)

1) geöffnete Datei 2) Export Spaltennamen

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) schreiben, um alle Daten an die 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++; 
     } 
} 

Bitte beachten Sie, dass der Begrenzer auch Teil des Wertes sein kann. In diesem Fall sollte das gesamte Feld in doppelte Anführungszeichen gesetzt werden.

+0

Es ist eine großartige Möglichkeit Begrenzungszeichen in diesem Repo zu entkommen: http://bitbucket.org/fourplusone/fourcsv –

11

Sie können auch so etwas wie tun:

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

Sie können Kombinationen von diesen verwenden, um eine CSV zusammen (die Ausgabe eines Arrays für den Spaltennamen ein Array für die Werte anhängen, etc).

Natürlich müssen Sie vorsichtig sein, um Werte, die bereits ein Komma enthalten, in Anführungszeichen zu setzen und dann alle Anführungszeichen im Wert zu entfernen.

+1

Was soll ich tun, wenn ich meine Datenbanktabelle in eine CSV-Datei konvertieren möchte. Wenn der Benutzer die Datei in Excel-Tabelle öffnet, kann er das Element in einer Tabellenform anzeigen – 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 *) Pfad atomar: (BOOL) useAuxifyFile-Codierung: (NSStringEncoding) enc Fehler: (NSError * *) error 'method gibt einen' BOOL' Wert zurück, nicht 'NSData'. – TheTiger

0

Hier ist eine volle Funktion, die den Job (Swift 3) tut:

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!)") 

} 
Verwandte Themen