Dot-Net-4.0
是否有 Microsoft.VisualBasic.FileIO.TextFieldParser 的寫對應物?
我需要創建一個新的 CSV 文件。編寫我自己的常式不會是一項艱鉅的任務,但是基類庫中有一個常式嗎?
不在框架裡,程式碼太簡單了。使用 StreamWriter.Write() 輕鬆完成,您只需要做一點提升即可正確引用字元串。它只需要幾行:
Module CsvWriter Public Sub WriteCsvLine(ByVal out As System.IO.TextWriter, ByVal ParamArray Values() As Object) For ix As Integer = 0 To Values.Length - 1 If ix > 0 Then out.Write(",") If TypeOf (Values(ix)) Is String Then out.Write("""" + CStr(Values(ix)).Replace("""", """""") + """") Else out.Write(Values(ix).ToString()) End If Next out.WriteLine() End Sub End Module
這是可用於從字元串列表生成一行 CSV 文件的函式(也可以使用 IEnumerable(Of String) 或字元串數組):
Function CreateCSVRow(strArray As List(Of String)) As String Dim csvCols As New List(Of String) Dim csvValue As String Dim needQuotes As Boolean For i As Integer = 0 To strArray.Count() - 1 csvValue = strArray(i) needQuotes = (csvValue.IndexOf(",", StringComparison.InvariantCulture) >= 0 _ OrElse csvValue.IndexOf("""", StringComparison.InvariantCulture) >= 0 _ OrElse csvValue.IndexOf(vbCrLf, StringComparison.InvariantCulture) >= 0 _ OrElse csvValue.IndexOf(" ", StringComparison.InvariantCulture) = 0 _ OrElse csvValue.IndexOf(" ", StringComparison.InvariantCulture) = csvValue.Length-1) csvValue = csvValue.Replace("""", """""") csvCols.Add(If(needQuotes, """" & csvValue & """", csvValue)) Next Return String.Join(",", csvCols.ToArray()) End Function