2009-07-21 8 views

Respuesta

2

Exportar a un archivo csv generalmente no es muy difícil. Importarlo es mucho más complicado de hacer correctamente. nombres de las columnas de exportación (pseudocódigo)

1) archivo abierto 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) escribir todos los datos al csv

:

para exportar datos a un archivo csv hacer lo siguiente

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++; 
     } 
} 

tenga en cuenta que el delimitador también puede ser parte del valor. Si esto sucede, el campo completo debe estar entre comillas dobles.

+0

Hay una gran manera de escapar caracteres delimitadores en este repo: http://bitbucket.org/fourplusone/fourcsv –

11

También puede hacer algo como:

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

Puede utilizar combinaciones de esta armar un archivo CSV (añada la salida de una matriz para los nombres de las columnas de una matriz para los valores, etc.).

Por supuesto, debe tener cuidado de poner comillas alrededor de los valores que ya contienen una coma, y ​​luego evitar cualquier comilla en el valor.

+1

¿Qué debo hacer si quiero convertir mi tabla de base de datos en un archivo csv? Por lo tanto, si el usuario abre el archivo en una hoja de Excel, puede ver el elemento en una tabla desde – 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 *) ruta atómicamente: (BOOL) useAuxiliaryFile codificación: (NSStringEncoding) enc error: (NSError * *) El método error' devuelve un valor 'BOOL' no' NSData'. – TheTiger

0

Aquí es una función completa que hace el trabajo (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!)") 

} 
Cuestiones relacionadas