我正在研究VS 2012,Vb.Net - .Net 4.0框架。
我的Vb.Net代码正在读取.csv文件,预计会在没有回车的情况下重写该文件。
但现在,Carriage Return Line Feed在.csv文件中创建为新行。 如何删除CR LF ??
Public Sub Test()
Try
Dim reader As StreamReader = New System.IO.StreamReader(File.OpenRead("D:\CSV\Test.csv"))
Dim listA As New List(Of String)()
If File.Exists("d:\CSV\TestOut.csv") Then
File.Delete("d:\CSV\TestOut.csv")
End If
Dim sw As New StreamWriter("d:\CSV\TestOut.csv")
Dim s As String = String.Empty
While reader.Peek() >= 0
Dim line As String = reader.ReadLine()
Dim values As String() = line.Split(";"c)
listA.Add(values(0))
s = s + line + Chr(10)
End While
reader.Close()
sw.WriteLine(s)
sw.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
答案 0 :(得分:0)
我看不出listA
或values
变量有什么用处。 CRLF到LF任务不需要它们。
请参阅:
Try
If File.Exists("D:\CSV\Output.csv") Then File.Delete("D:\CSV\Output.csv")
Using reader As New StreamReader(File.OpenRead("D:\CSV\Input.csv"))
Using writer As New StreamWriter("D:\CSV\Output.csv")
Dim strBldr As New Text.StringBuilder
While reader.Peek > -1 ' Seen like this at MSDN page for Peek() function
Dim line = reader.ReadLine
' If you really need the first value of each line, you can still do it here.
strBldr.Append(line).Append(Chr(10))
End While
writer.Write(strBldr.ToString)
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
您应该使用Using
- Streams的关键字。离开时,End Using
将关闭并Dispose()
流对象。它总会这样做,即使抛出异常或你return
一个值;就像Finally
块中的Try
语句一样。
当您在String
之后经常展开s = s + line + Chr(10)
- 变量时,请考虑使用针对此优化的StringBuilder
。
当您需要列表中的第一个值和第一个值时,line.Split({";"c}, 2)
将拆分第一个值并将大部分值作为一个String
而不是数百个{{1}仅用于垃圾收集的对象。更合适的是使用String
根本不会产生休息。