Dot-Net-4.0

是否有 Microsoft.VisualBasic.FileIO.TextFieldParser 的寫對應物?

  • November 28, 2018

我需要創建一個新的 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

引用自:https://stackoverflow.com/questions/12963117