2009-07-21 9 views

Odpowiedz

2

Eksportowanie do pliku csv zwykle nie jest trudne. Importowanie go jest o wiele trudniejsze do wykonania.

do eksportu danych do pliku CSV wykonaj następujące czynności: (pseudokod)

1) otwarty plik 2) nazwy kolumn eksport

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) zapis wszystkich danych do pliku 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++; 
     } 
} 

proszę uwaga na fakt, że ogranicznik może również być częścią wartości. Jeśli tak się stanie, całe pole powinno być ujęte w podwójny cudzysłów.

+0

Jest to świetny sposób, aby uciec ograniczniki znaków w tym repo: http://bitbucket.org/fourplusone/fourcsv –

11

Można też zrobić coś takiego:

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

Można użyć kombinacji tego ułożyła CSV (dołącz wyjście jednej tablicy dla nazw kolumn do jednej tablicy dla wartości, etc).

Oczywiście należy zachować ostrożność, umieszczając cytaty wokół wartości, które już zawierają przecinek, a następnie uciec od wszelkich kwotowań w wartości.

+1

Co powinienem zrobić, jeśli chcę przekonwertować moją tabelę bazy danych na plik csv. Więc jeśli użytkownik otworzy plik w arkuszu Excela, może wyświetlić element w formie tabeli: – 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 *) ścieżka atomowo: (BOOL) użyj kodowania EnfileFile: (NSStringEncoding) enc błędu: (NSError * *) metoda "error" zwraca wartość 'BOOL', a nie' NSData'. – TheTiger

0

Oto pełen funkcji, które spełnia swoje zadanie (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!)") 

}