2016-07-02 3 views
-2

Es scheint andere Antworten zu geben, dass dies auf Stack-Überlauf, aber nichts, was spezifisch für schnelle ist.Wie gehe ich beim Schreiben von Objekten in CSV in Swift mit Kommas um?

Ich bin eine CSV von einer Site-Objekt zu erzeugen, die 3 Eigenschaften

Struct SiteDetails { 
    var siteName:String? 
    var siteType: String? 
    var siteUrl: String? 
} 

Das Problem ist, dass site ein Komma enthalten kann also sein es wirklich schwer machen aus CSV in ein Objekt zu konvertieren, als ich das gelesen CSV-Datei zurück, da einige Zeilen 4 oder mehr CSV-Elemente enthalten.

Hier ist der Code, den ich in CSV exportieren bin mit:

func convertToCSV(sites: [SiteDetails]) -> String { 
    var siteAsCSV = "" 
    siteAsCSV.appendContentsOf("siteName,siteType,siteUrl\n") 

    for site in sites { 
     siteAsCSV.appendContentsOf("\(site.siteName),\(site.siteType),\(site.siteUrl)\n") 
    } 
} 

Irgendwelche Ideen, wie dieses zusätzlichen Komma Problem zu stoppen?

+0

@ Martin R Können Sie das Duplikat als Antwort entfernen Sie nicht eine schnelle spezifische Antwort geteilt hat –

+0

ich die Frage wieder geöffnet haben. Die Antwort auf * "Wie gehe ich mit Kommas um, wenn Objekte in CSV geschrieben werden" * ist * "umschließen Sie jedes Feld in Anführungszeichen" *, wie in http://stackoverflow.com/questions/769621/dealing-with beschrieben -commas-in-a-csv-Datei, egal welche Sprache Sie verwenden. Wenn Sie nicht wissen, wie Sie vor und nach jedem Feld in Swift Anführungszeichen drucken, würde ich vorschlagen, dass Sie die Frage entsprechend aktualisieren. –

Antwort

2

Die CSV specification schlägt vor, alle Felder, die Sonderzeichen enthalten, in doppelte Anführungszeichen zu schreiben.

+0

Wie machst du das in swift? –

+0

Entschuldigung, Ihr Code ist zu inkonsistent, zum Beispiel die Benennung ('sitename' vs.' SiteName') und der Typ stimmt nicht mit dem Parameter überein ('site' soll ein Array sein, aber' site' - eine weitere Benennungsverwechslung wegen der Kleinbuchstabe - ist nicht). Abgesehen davon ist es ein bemerkenswertes negatives Beispiel für den Missbrauch von Optionals, da alle Felder in CSV benötigt werden, so dass sie niemals "nil" sein können. – vadian

+0

danke - ich habe es aufgeräumt. Ich habe es ziemlich spät als einfachen Fall zu demonstrieren –

1

Ich habe es geschafft, dies funktioniert mit der Änderung des Hinzufügens der doppelten Anführungszeichen zu jedem Feld. In Swift müssen Sie das Anführungszeichen umgehen, das aussieht, als ob es nicht ausgeführt wird, wenn Sie die Syntaxhervorhebung von Xcode betrachten, aber es funktioniert gut.

func convertToCSV(sites: [SiteDetails]) -> String { 
    var SiteAsCSV = "" 
    SiteAsCSV.appendContentsOf("siteName,siteType,siteUrl\n") 

    for site in sites { 
     SiteAsCSV.appendContentsOf("\"\(site.SiteName)\",\"\(site.Sitetype)\",\"\(site.SiteUrl)\"\n") 
    } 
} 
Verwandte Themen