2017-05-25 73 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 
---------- 
相关问题