2016-07-11 21 views
-5

嗨下面的代碼是我創建CSV文件的代碼。 csv的創建是正常的,但是當csv轉換爲文本文件時,它們應該在值的開始和結尾之間引用引號。 EX:在CSV文件中,值是:Jham,在文本文件中它應該是:「Jham」 - 我如何管理它?有人可以幫忙嗎?在CSV文件中的非引用標記,但在TXT文件中它有

listofValue = ZipFileStr & "," & Img1Val & "," & Img2Val & "," & RExVal & "," & BundleNo & "," & BundleNo & "," & URNVal & "," & PromocodeVal & "," & ZipFileStore & "," & SNumVal & "," & DpackVal & "," & ArrivalDate & "," & CompleteDateTwo & "," & KidPCVal & "," & MDBName 

Dim PathX As String = TempPath & "\" 

If Not IO.Directory.Exists(PathX) Then 
    MkDir(PathX) 
End If 

Dim sampleX As String = PathX & ZipFileStr & "P.csv" 
Dim outFile As IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(sampleX, True) 

outFile.WriteLine(listofValue) 
outFile.Close() 

回答

0

首先,在發佈代碼片段時,請格式化它們以提高可讀性。我已經爲你解決了這個問題。

其次,在CSV文件和文本文件之間沒有「轉換」。 CSV只是純文本。如果文本包含記錄和字段分隔符,那麼它是一個CSV文件,否則它不是。無論哪種方式都是純文本。

至於這個問題,我建議寫一個CSV加引號的值是這樣的:

Dim line = String.Format("""{0}"",""{1}"",""{2}""", 
         firstValue, 
         secondValue, 
         thirdValue) 

使用的String.Format,或在2015年VB,串插使得代碼更易讀。至於在文字字符串中加雙引號,你只需用另一個雙引號將其轉義。你也可以使用ControlChars.Quote領域:

Dim line = String.Format("{0}{1}{0},{0}{2}{0},{0}{3}{0}", 
         ControlChars.Quote, 
         firstValue, 
         secondValue, 
         thirdValue) 

注意,它是獲得報價一般只有文本值,而不是數字和日期等。這是因爲引用的主要原因是允許值包含分隔符,即逗號或換行符。如果您的值都不包含分隔符,那麼您可以完全省略引號。

編輯:作爲一個例子,這裏就是我可能會寫一DataTable到CSV文件,其中第一和第四列包含String值,第二列包含數字和第三列包含Date值。

Private Sub WriteToCsv(table As DataTable, path As String) 
    Dim lines As New List(Of String) 

    For Each row As DataRow In table.Rows 
     lines.Add(String.Format("""{0}"",{1},{2:yyyy-MM-dd},""{3}""", 
           row(0), 
           row(1), 
           row(2), 
           row(3))) 
    Next 

    IO.File.WriteAllLines(path, lines) 
End Sub 
+0

我對它有過研究,但我從未嘗試過。它看起來與你的建議相同。我會在稍後做。感謝這一點。一旦它是正確的,我會通知你。謝謝你 – Jham

+0

嗨!它實際上沒有工作 – Jham

+0

我發佈的代碼將給你一個逗號分隔的字符串,每個值用雙引號括起來。如果這就是你想要的,那麼正確使用我的代碼將工作。如果這就是你想要的,它不適合你,那麼你做錯了。不知道你做了什麼,沒有辦法知道它有什麼問題。 – jmcilhinney