2017-05-25 79 views
-1

我導入其中包含逗號作爲雙引號括起來,像下面一個字符串的一部分csv文件elcosed:替換逗號(,)在雙引號括起來

 
a,b,c,d,e,f 
a,"b,c,d,e",f 

爲了得到正確的領域,我想先改變每一行,所以我得到這個期望輸出:

 
a,b,c,d,e,f 
a,"b;c;d;e",f 

我做了搜索第一,但我沒有找到堆棧溢出別的,我很少在VBScript工作。任何幫助讚賞。

編輯:編輯補充我來完成這個任務

Sub csv2tab() 
    Const ForReading = 1 
    Const ForWriting = 2 

    Dim regex As Object 
    Set regex = CreateObject("VBScript.Regexp") 
    regex.IgnoreCase = True 
    regex.Global = True 
    regex.Pattern = """[^""]*""|[^,]*" 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFile = objFSO.OpenTextFile("C:\Users\venkat\Desktop\Freelancers\Upwork_tasks\Chris Hickey\Datafiles\smallerfile_11.csv", ForReading) 

    Do Until objFile.AtEndOfStream 
     strLine = objFile.ReadLine 
     strLine = Replace(strLine, regex.Replace(Line, ","), vbTab) 
     strNewText = strNewText & strLine & vbCrLf 
    Loop 
    objFile.Close 

    Set objFile = objFSO.OpenTextFile("C:\Users\venkat\Desktop\Freelancers\Upwork_tasks\Chris Hickey\Datafiles\test.txt", ForWriting) 

    objFile.WriteLine strNewText 
    objFile.Close 
End Sub 

在上面的代碼的代碼,我試圖改變分隔符選項卡,很好,但不是強制性的我。我想我用正則表達式搞亂了某個地方。

+0

堆棧溢出不是代碼寫入服務。努力自己解決這個問題。如果遇到困難,您可以解釋遇到的問題,包括代碼的相關部分,並詢問關於該代碼的具體問題,我們會盡力幫助。祝你好運。 –

+1

使用'Split(input,「,」)'解析csv數據讓我很難過。這只是一個很多的邊緣案例。尋找一個專用的,專用的csv解析器而不是'Split()',突然之間這個問題就消失了。 –

+0

@KenWhite,我用我試過的代碼更新了主題。 – Venkat

回答

1

A 體面 .CSV在每一行(和一個列標題)中具有相同的列數。所以,你的樣本數據應該是:

"C1","C2","C3","C4","C5","C6" 
a,b,c,d,e,f 
a,"b1,b2,b3",c,d,"e1,e2,e3,e4",f 

一個體面工具(在引述領域如分離器),有特殊情況。CSV交易工作自動地:

Option Explicit 

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
Dim sDDir : sDDir = goFS.GetParentFolderName(WScript.ScriptFullName) 
Dim oCN : Set oCN = CreateObject("ADODB.Connection") 
Dim sCS : sCS = Join(Array(_ 
    "Driver=Microsoft Access Text Driver (*.txt, *.csv)" _ 
    , "DBQ=" & sDDir _ 
    , "Extensions=asc,csv,tab,txt" _ 
), ";") 
Dim oRS 

WScript.Echo "sCS:", sCS 
oCN.Open sCS 
Set oRS = oCN.Execute("SELECT * FROM [44187292.csv]") 
WScript.Echo oRS.GetString(2, , vbCrLf, vbCrLf & "----------" & vbCrLf, "<null>") 
oCN.close 

輸出:

cscript 44187292.vbs 
sCS: Driver=Microsoft Access Text Driver (*.txt, *.csv);DBQ=e:\work\proj\soa\tmp;Extensions=asc,csv,tab,txt 
a 
b 
c 
d 
e 
f 
---------- 
a 
b1,b2,b3 
c 
d 
e1,e2,e3,e4 
f 
---------- 
相關問題