čeština v CSV souboru   zodpovězená otázka

VB.NET

Zdravím, prosím (opět) o radu:) Pomocí kódu níže načítám do dataTable CSV soubor. Vše se načte OK až na české znaky. Přitom když soubor otevřu ručně například v excelu, české znaky jsou zobrazeny korektně. Četl jsem zde i diskuzi kde zazněla rada otevřít soubor a uložit s jiným kódováním. To ale bohužel není v mém případě možné. Jde tedy něják načíst data aby se české znaky zobrazili korektně?

Nyní data načítám takto:

    Sub loadCSV(ByVal CSVFile As String)
        Dim dtCSV As DataTable = New DataTable 'vytvořím novou dataTable

        dtCSV.Columns.Add()


        Dim stream As IO.Stream = IO.File.OpenRead(CSVFile)
        Dim soubor As IO.StreamReader = New IO.StreamReader(CSVFile, System.Text.Encoding.UTF8, False)




        While Not soubor.EndOfStream
            Dim text As String = soubor.ReadLine()
            dtCSV.Rows.Add()
            dtCSV.Rows(dtCSV.Rows.Count - 1).Item(0) = text
        End While

        soubor.Close() 'zavřu soubor


        frmOnImport.DataGridView1.DataSource = dtCSV 'zobrazím výsledek
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro načtení CSV souboru použijte OLE DB/ODBC poskytovatele pro textové soubory. Jednak to bude daleko výkonější a hodí se to už jen tím, že pro uchování dat používáte databázové struktury. To kódování by se tím mělo vyřešit automaticky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsem právě zkoušel, jenže u oledDB mi to házi chybu: Nelze najít instalovatelnou metodu ISAM

a u ODBC pro změnu Obecná chyba Nelze otevřít klíč registru

O té chybě u oleDB jsem něco našel na stránkách Microsoftu, řešení ale vyžaduje zásah do registru což není u mě přípustné.

Pro ukázku přikládám kód, kterým se pokouším načíst data přes ODBC:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.OpenFileDialog1.ShowDialog()
        Dim path As String = Me.OpenFileDialog1.FileName


        Dim dtCSV As DataTable = New DataTable
        Dim dbAdapter As Odbc.OdbcDataAdapter = New Odbc.OdbcDataAdapter
        Dim dotaz As Odbc.OdbcCommand = New Odbc.OdbcCommand

        Dim spojeni As Odbc.OdbcConnection = New Odbc.OdbcConnection("Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & path & ";Extensions=asc,csv,tab,txt;")


        With dotaz
            .Connection = spojeni
            .CommandType = CommandType.Text
            .CommandText = "SELECT * FROM " & Me.OpenFileDialog1.SafeFileName
        End With


        dbAdapter.SelectCommand = dotaz
        dbAdapter.Fill(dtCSV)

        Me.DataGridView1.DataSource = dtCSV


    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mě se to na CSV souboru (exportovaném z Adresáře Windows do C:\Dokumenty\Contacts.csv) podařilo rozjet v pohodě:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim contacts As New DataTable
  Using adapter As New OdbcDataAdapter
    Using connection As New OdbcConnection("Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\Dokumenty;Extensions=csv")
      Using command As New OdbcCommand("SELECT * FROM Contacts.csv", connection)
        adapter.SelectCommand = command
        Dim n = adapter.Fill(contacts)
      End Using
    End Using
  End Using
End Sub

Vaše chyba bude asi následující: V ConnectionStringu máte v parametru Dbq cestu k souboru místo složky kde se soubor nachází a v parametru SELECT máte úplnou cestu k souboru místo pouze názvu souboru (zaznamenal jsem problémy s dlouhými názvy souborů).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Do selectu jsem dosazoval pouze fileName ale connectionString byl opravdu špatně. Upravil jsem kód tak aby se tam dosazovala pouze cesta k souboru a už to je ok včetně češtiny.

Přikládám fungující řešení:

   Sub loadCSV()
        Me.OpenFileDialog1.ShowDialog()

        Dim path As String = System.IO.Path.GetDirectoryName(Me.OpenFileDialog1.FileName)
        Dim file As String = Me.OpenFileDialog1.SafeFileName

        Dim dtCSV As DataTable = New DataTable
        Dim dbAdapter As Odbc.OdbcDataAdapter = New Odbc.OdbcDataAdapter
        Dim dotaz As Odbc.OdbcCommand = New Odbc.OdbcCommand
        Dim spojeni As Odbc.OdbcConnection = New Odbc.OdbcConnection("Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & path & ";Extensions=asc,csv,tab,txt;")


        With dotaz
            .Connection = spojeni
            .CommandType = CommandType.Text
            .CommandText = "SELECT * FROM " & file
        End With


        dbAdapter.SelectCommand = dotaz
        dbAdapter.Fill(dtCSV)

        Me.DataGridView1.DataSource = dtCSV

    End Sub

Díky za radu, takovéhle drobné chyby jsou nejhorší:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jestli se data čtou v Excelu normálně, pak nemají kódování UTF8

Změňte UTF8 na Default

Dim soubor As IO.StreamReader = New IO.StreamReader(CSVFile, System.Text.Encoding.Default, False)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback