关于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
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文件的读取的主要内容,如果未能解决你的问题,请参考以下文章