关于VB.NET的CSV文件的读取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于VB.NET的CSV文件的读取相关的知识,希望对你有一定的参考价值。

vb.net csv文件的读写已经可以实现,但是会出现这样一个问题:
当我导出生成一个CSV文件后(每个单元格的内容都没有逗号),再读取上来时,CSV文件每个单元格内容之间会有逗号,这是肯定的,但是如果我导出后打开这个CSV文件,我会调整列宽以看到所有内容,然后保存,这时我用VB.net读取的时候,发现有的行末尾多出数量不等的逗号,有的一个,有的两个。
有没有大侠遇到这样的问题,帮忙解决一下,谢谢!
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
On Error GoTo FaulFormat

Dim myStream As System.IO.FileStream
myStream = OpenFileDialog1.OpenFile()

If Not (myStream Is Nothing) Then
Dim SR As New IO.StreamReader(myStream, System.Text.Encoding.Default)
TextBox3.Text = SR.ReadToEnd
SR.Close()
End If

myStream.Close()
End If

参考技术A 你是怎么读写的呢?下面是简单的读写
Dim str As String = (My.Computer.FileSystem.ReadAllText("C:\QD51-R24_A.csv")) '读
My.Computer.FileSystem.WriteAllText("C:\1.csv", str, True) '写追问

程序读写都没问题了,只是如果我手动去打开用程序生成的CSV文件,然后调整一下列宽再保存后,程序读上来的每行会不定的加逗号。如果我不去手动操作CSV文件,程序读上来就是我想要的。关键是我调整了一下列宽,就会变成这样,可能大家都没注意,要不你试一下。

本回答被提问者采纳

如何在 vb.net 中将 .csv 文件导入我的 datagridview?

【中文标题】如何在 vb.net 中将 .csv 文件导入我的 datagridview?【英文标题】:How to import .csv file to my datagridview in vb.net? 【发布时间】:2017-10-13 22:14:54 【问题描述】:

我使用的代码是:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim fName As String = ""
    OpenFileDialog1.InitialDirectory = "c:\desktop"
    OpenFileDialog1.Filter = "CSV files (*.csv)|*.CSV"
    OpenFileDialog1.FilterIndex = 2
    OpenFileDialog1.RestoreDirectory = True
    If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
        fName = OpenFileDialog1.FileName
    End If
    txtpathfile.Text = fName
    Dim TextLine As String = ""
    Dim SplitLine() As String

    If System.IO.File.Exists(fName) = True Then
        Dim objReader As New System.IO.StreamReader(fName)
        Do While objReader.Peek() <> -1
            TextLine = objReader.ReadLine()
            SplitLine = Split(TextLine, ",")
            Me.DataGridView2.Rows.Add(SplitLine)
        Loop
    Else
        MsgBox("File Does Not Exist")
    End If
End Sub

我的输出看起来编码错误:

我的代码有什么问题?请帮我。感谢您的考虑。

【问题讨论】:

所选文件的内容看起来像一个 zip 压缩包 不,先生,这不是 zip 文件。为什么我的输出类似于条形码? 该输出表明您正在使用错误的编码读取文件来读取文件,因此读取的字节被转换为错误的字符。创建StreamReader 时需要指定编码,例如Dim objReader As New System.IO.StreamReader(fName, Text.Encoding.ASCII)。如果您不知道使用什么编码来编写文件,那么您将不得不尝试几种不同的编码,看看哪种有效。 顺便说一句,当你完成文件时,你并没有关闭它。我建议使用Using 语句来创建StreamReader 以确保文件已关闭,这在End Using 语句中隐式发生。 我已经告诉过你它的用途了。如果您不理解我的解释或需要更多信息,请进行适当的研究。我们不是来教您 VB.NET 编程的基础知识。我们在这里帮助解决特定的编码问题,我已经做到了。您完全可以使用 VS 中的帮助菜单打开 StreamReader 构造函数的文档并自己阅读。 【参考方案1】:

我从谷歌来到这里。以防万一有人想快速复制代码:

    Private Sub ReadCSV()
        Dim fName As String = "C:\myfile.csv"
        Dim TextLine As String = ""
        Dim SplitLine() As String

        If System.IO.File.Exists(fName) = True Then
            Using objReader As New System.IO.StreamReader(fName, Encoding.ASCII)
                Do While objReader.Peek() <> -1
                    TextLine = objReader.ReadLine()
                    SplitLine = Split(TextLine, ";")
                    Me.DataGridView1.Rows.Add(SplitLine)
                Loop
            End Using
        Else
            MsgBox("File Does Not Exist")
        End If
    End Sub

【讨论】:

【参考方案2】:

这真的是工作!

Dim fName As String = ""
   OpenFileDialog1.InitialDirectory = "c:\desktop"
       OpenFileDialog1.Filter = "CSV files(*.csv)|*.csv"  
    OpenFileDialog1.FilterIndex = 2
    OpenFileDialog1.RestoreDirectory = True
    If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
        fName = OpenFileDialog1.FileName
    End If
    txtpathfile.Text = fName
    Dim TextLine As String = ""
    Dim SplitLine() As String


    If System.IO.File.Exists(fName) = True Then
        Dim objReader As New System.IO.StreamReader(txtpathfile.Text, Encoding.ASCII)
        Do While objReader.Peek() <> -1
            TextLine = objReader.ReadLine()
            SplitLine = Split(TextLine, ";")
            Me.DataGridView1.Rows.Add(SplitLine)
        Loop
    Else
        MsgBox("File Does Not Exist")
    End If

【讨论】:

您应该在流式阅读器中包含“Encoding.ASCII”。

以上是关于关于VB.NET的CSV文件的读取的主要内容,如果未能解决你的问题,请参考以下文章

vb如何实时读取csv文件?

编写 CSV 文件 VB.NET

VB.NET:将 CSV 文件读入二维数组

vb.net 导出csv后数字格式问题

vb.net xls 到 csv 带引号?

关于jmeter读取CSV文件的详细设置