Guten Morgen,
ich habe mir ein kleines Tool gebaut um mir CSV-Listen für Shopify zu bauen, um Artikel per Knopfdruck anzulegen, statt mühsam die CSV selbst auszufüllen.
Das Problem ist, dass Shopify ausschließlich Kommazeichengetrennte CSV's akzeptiert. Die Einlesemethode in das DataGridView via String.Split hat mir nur Probleme bereitet,
wenn das Splitzeichen ein Komma war.
Nun habe ich den TextFieldParser gefunden, dieser Lädt meine CSV ohne Probleme in das DataGridView (bzw. DataTable), sodass alles korrekt formatiert ist.
Jetzt mein Problem: Eine Spalte ist die Produktbeschreibung. Dort kommen sehr wohl auch "," vor. Sobald das passiert wird meine CSV nicht mehr korrekt eingelesen (Felder verschieben sich etc.).
Hier mal der Code zum Einlesen, welchen ich gefunden hatte:
Ich habe schon probiert um alle Kommazeichen ein " oder ' zu packen, leider ohne Erfolg. Wie escape ich diese nun korrekt?
Hat jemand eine Idee? Ich könnte diese natürlich auch durch " " ersetzen, aber das ist ja nicht der Sinn dabei.
Nachtrag:
Das mit dem Einlesen hab ich behoben:
Und nach dem Einlesen dann:
Das klappt, alle Werte sind da, wo sie hingehören und die Kommazeichen sind auch richtig.
Jetzt hab ich das gleiche Problem rückwärts beim Schreiben.
Bisher nutze ich folgende Methode:
Dort muss ich nun nur noch schaffen, dass das Kommazeichen auch richtig exportiert wird.
Probiert habe ich folgendes:
Das zerschießt aber trotzdem die CSV, wenn ich diese dann in Excel o.Ä. einlese. Ab dem Punkt wo das Komma auftritt, ist alles verschoben.
Hat jemand eine Idee, wie ich die CSV nun mit Kommata schreiben könnte?
Vielen Dank für Tipps
Grüße,
xored
ich habe mir ein kleines Tool gebaut um mir CSV-Listen für Shopify zu bauen, um Artikel per Knopfdruck anzulegen, statt mühsam die CSV selbst auszufüllen.
Das Problem ist, dass Shopify ausschließlich Kommazeichengetrennte CSV's akzeptiert. Die Einlesemethode in das DataGridView via String.Split hat mir nur Probleme bereitet,
wenn das Splitzeichen ein Komma war.
Nun habe ich den TextFieldParser gefunden, dieser Lädt meine CSV ohne Probleme in das DataGridView (bzw. DataTable), sodass alles korrekt formatiert ist.
Jetzt mein Problem: Eine Spalte ist die Produktbeschreibung. Dort kommen sehr wohl auch "," vor. Sobald das passiert wird meine CSV nicht mehr korrekt eingelesen (Felder verschieben sich etc.).
Hier mal der Code zum Einlesen, welchen ich gefunden hatte:
VB.NET-Quellcode
- Dim csvData As DataTable = New DataTable()
- Public Function GetDataTabletFromCSVFile(ByVal csv_file_path As String) As DataTable
- Try
- Using csvReader As TextFieldParser = New TextFieldParser(csv_file_path)
- csvReader.SetDelimiters(New String() {","})
- csvReader.HasFieldsEnclosedInQuotes = True
- Dim colFields As String() = csvReader.ReadFields()
- For Each column As String In colFields
- Dim datecolumn As DataColumn = New DataColumn(column)
- datecolumn.AllowDBNull = True
- csvData.Columns.Add(datecolumn)
- Next
- While Not csvReader.EndOfData
- Dim fieldData As String() = csvReader.ReadFields()
- For i As Integer = 0 To fieldData.Length - 1
- If fieldData(i) = "" Then
- fieldData(i) = Nothing
- End If
- Next
- csvData.Rows.Add(fieldData)
- End While
- End Using
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- Return csvData
- End Function
Ich habe schon probiert um alle Kommazeichen ein " oder ' zu packen, leider ohne Erfolg. Wie escape ich diese nun korrekt?
Hat jemand eine Idee? Ich könnte diese natürlich auch durch " " ersetzen, aber das ist ja nicht der Sinn dabei.
Nachtrag:
Das mit dem Einlesen hab ich behoben:
Und nach dem Einlesen dann:
Das klappt, alle Werte sind da, wo sie hingehören und die Kommazeichen sind auch richtig.
Jetzt hab ich das gleiche Problem rückwärts beim Schreiben.
Bisher nutze ich folgende Methode:
VB.NET-Quellcode
- Private Function dtTableToCSV(dt As DataTable, filename As String, Optional headers As Boolean = True, Optional delim As String = ",")
- Dim txt As String
- Dim fileloc As String = filename
- If File.Exists(fileloc) Then
- File.Delete(fileloc)
- End If
- Dim n = 0
- If headers = True Then
- For Each column As DataColumn In dt.Columns
- If n = 0 Then
- txt += column.ColumnName
- Else
- txt += delim + column.ColumnName
- End If
- n += 1
- Next
- End If
- txt += vbCrLf
- n = 0
- For Each row As DataRow In dt.Rows
- Dim line As String = ""
- For Each column As DataColumn In dt.Columns
- line += delim & row(column.ColumnName).ToString()
- Next
- If dt.Rows.Count - 1 = n Then
- txt += line.Substring(1)
- Else
- txt += line.Substring(1) & vbCrLf
- End If
- n += 1
- Next
- Using sw As StreamWriter = New StreamWriter(fileloc)
- sw.Write(txt)
- End Using
- dt.Dispose()
- Return fileloc
- End Function
Dort muss ich nun nur noch schaffen, dass das Kommazeichen auch richtig exportiert wird.
Probiert habe ich folgendes:
Das zerschießt aber trotzdem die CSV, wenn ich diese dann in Excel o.Ä. einlese. Ab dem Punkt wo das Komma auftritt, ist alles verschoben.
Hat jemand eine Idee, wie ich die CSV nun mit Kommata schreiben könnte?
Vielen Dank für Tipps
Grüße,
xored