Esportazione a file CSV e caratteri spuri

di il
4 risposte

Esportazione a file CSV e caratteri spuri

Ho questo codice, che legge un file csv (tramite SCHEMA.INI) e viene letto da un DataTable.

   Public Function LoadCsvFile(filePath As String) As DataTable
       Try
           tempDT = New DataTable
           cnn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited""")
           da = New OleDb.OleDbDataAdapter("SELECT * FROM [legali.csv]", cnn)
           da.Fill(tempDT)
           Dim righe = tempDT.Rows.Count
           Dim colonne = tempDT.Columns.Count
           Return tempDT
           Exit Function
       Catch ex As Exception
           MsgBox(Err.Number & " " & Chr(13) & Err.Description)
       End Try
   End Function
SCHEMA.INI
[legali.CSV]
ColNameHeader=FALSE
CharacterSet=1252
Format=Delimited(;)
TextDelimiter="
Col1="ID" long
Col2="COGNOME/NOME" Text Width 50
Col3="INDIRIZZO" Text Width 50
Col4="CAP" Text Width 5
Col5="PROV" Text Width 2
Col6="COMUNE" Text Width 50

Dopo le modifiche ,tento di esportare i dati del datatable nel file csv per conservare le eventuali modifiche,
ma dopo diverse prove di sono accorto (leggendo il file con un hex editor) che il file inizia con caratteri
spuri, che non capisco da dove provengano.Potete aiutarmi? Grazie


   Public Sub ExportToCsvFile()
       Dim Path As String = Application.StartupPath & "\LEGALI_COPIA.CSV"
       Dim testo As String
       For x = 0 To tempDT.Rows.Count - 2
           Dim elemento As DataRow
           elemento = tempDT.Rows(x)
           Dim myId As String = elemento.Item(0) & ";"
           Dim myCognome As String = """" & elemento.Item(1) & """;"
           Dim myIndirizzo As String = """" & elemento.Item(2) & """;"
           Dim myCap As String = """" & elemento.Item(3) & """;"
           Dim myProv As String = """" & elemento.Item(4) & """;"
           Dim myComune As String = """" & elemento.Item(5) & """" & vbCrLf
           testo += myId + myCognome + myIndirizzo + myCap + myProv + myComune
       Next
       My.Computer.FileSystem.WriteAllText(Path, testo, False)
   End Sub

4 Risposte

  • Re: Esportazione a file CSV e caratteri spuri

    Quei tre caratteri sono noti come Byte Order Marker (BOM) ed indicano la codifica usata per creare il file (UTF-8).  Il metodo WriteAllText ha un ulteriore parametro per specificare la codifica da usare.  Sulla guida puoi trovare tutti gli approfondimenti del caso.

  • Re: Esportazione a file CSV e caratteri spuri

    Grazie,Grumpy!

    Ho finalmente risolto!Avevo pensato di usare WriteAllBytes,ma poi ho letto la tua risposta.

    Per chi possa avere lo stesso problema riporto le modifiche apportate al codice:

    Imports System.Data.OleDb
    Imports System.Text
    Imports Microsoft.VisualBasic.Strings
    
    .....
    
        Public Sub ExportToCsvFile()
            Dim Path As String = Application.StartupPath & "\LEGALI_new.CSV"
            Dim testo As String
            Dim encoding As Encoding = Encoding.ASCII
            For x = 0 To tempDT.Rows.Count - 2
                Dim elemento As DataRow
                elemento = tempDT.Rows(x)
                Dim myId As String = elemento.Item(0) & ";"
                Dim myCognome As String = """" & elemento.Item(1) & """;"
                Dim myIndirizzo As String = """" & elemento.Item(2) & """;"
                Dim myCap As String = """" & elemento.Item(3) & """;"
                Dim myProv As String = """" & elemento.Item(4) & """;"
                Dim myComune As String = """" & elemento.Item(5) & """" & vbCrLf
                testo += myId + myCognome + myIndirizzo + myCap + myProv + myComune
            Next
            My.Computer.FileSystem.WriteAllText(Path, testo, False, encoding)
        End Sub
    
  • Re: Esportazione a file CSV e caratteri spuri

    Prego. Nella riga 

    testo += myId + myCognome + myIndirizzo + myCap + myProv + myComune

    sarebbe meglio usare “&” come operatore di concatenamento anziché “+”. Meglio ancora usare uno StringBuiilder visto che siamo dentro a un loop.

  • Re: Esportazione a file CSV e caratteri spuri

    Io sinceramente al posto del Encoding.ASCII preferisco il Encoding.Default

    oppure meglio ancora codificarlo in "UTF-8 senza BOM"

    Dim encoding As New System.Text.UTF8Encoding(False)

Devi accedere o registrarti per scrivere nel forum
4 risposte