Moja aplikacja ma funkcję, która może eksportować niektóre dane do pliku csv, a następnie skopiować na komputer. Nie jestem pewien, jaki api użyć do realizacji tej funkcji. Czy ktoś o tym wie? Z góry dziękuję.Jak eksportować dane do pliku csv za pomocą iPhone SDK 3.0?
Odpowiedz
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.
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.
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
NSData *data=[[arr componentsJoinedByString:@","] writeToFile:@"Bhavesh.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL];
[mail addAttachmentData:data mimeType:@"text/csv" fileName:@"Bhavesh.csv"];
'- (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
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!)")
}
Jest to świetny sposób, aby uciec ograniczniki znaków w tym repo: http://bitbucket.org/fourplusone/fourcsv –