首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何移除字符而忽略分隔符?

如何移除字符而忽略分隔符?
EN

Stack Overflow用户
提问于 2013-11-26 11:35:23
回答 1查看 287关注 0票数 1

我有一个csv文件,里面有联系人。这些联系人将通过vb-脚本导入到Exchange-Server中。问题是源文件包含被解释为分隔符的符号:

代码语言:javascript
复制
Germany,Seehger,Warehouse,Seehger,"Schmitt, Michael",,Michael,,,,,michael.schmitt@seehger.de,,,,61462,Rosbach,,Frankfurter Strasse 243,,Warehouse
,,,,"Backup, Network",,Network,,,,,NBackup@xyz.com,,,,,Backup,,,,

第一行是“施密特,迈克尔”。第二行是“备份,网络”。如何删除引号并确保逗号不被解释为分隔符。

我的第一种方法是在导入put之前使用正则表达式来清理数据,这是不可能的。

这是我目前的剧本:

代码语言:javascript
复制
Dim objFSO, objQuelldatei, objOu, objADKontakt, objKontakt
Dim strQuelldatei, strKontaktOU, strZeileTemp, strtemp
Dim aUserdaten

Const ForReading = 1   

strKontaktOU = "LDAP://ou=KontakteTest,dc=exp,dc=xyz,dc=de"

strQuelldatei = "C:\test.csv"

Set objOu = GetObject(strKontaktOU)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objQuelldatei = objFSO.OpenTextFile(strQuelldatei, ForReading)
    Do Until objQuelldatei.AtEndOfStream 
        strZeileTemp = objQuelldatei.Readline 

            If InStr(strZeileTemp, Chr(34) >
               'Werte per Komma trennen und in eindimensionales Array schreiben
               aUserdaten = Split(strZeileTemp, ",") 

               emailExists = False
                   If Not emailExists Then

                   strtemp = aUserdaten(4)
                   wscript.echo strtemp

                   Set objKontakt = objOu.Create("contact", "CN=" &strtemp)

                   objKontakt.put "co" , aUserdaten(0)
                   objKontakt.put "company" , aUserdaten(1)
                   objKontakt.put "department" , aUserdaten(2)
                   objKontakt.put "description" , aUserdaten(3)
                   objKontakt.put "displayName" , aUserdaten(4)
                   objKontakt.put "facsimileTelephoneNumber" , aUserdaten(5)
                   objKontakt.put "givenName" , aUserdaten(6)
                   objKontakt.put "homePhone" , aUserdaten(7)
                   objKontakt.put "info" , aUserdaten(8)
                   objKontakt.put "initials" , aUserdaten(9)
                   objKontakt.put "ipPhone" , aUserdaten(10)
                   objKontakt.put "mail" , aUserdaten(11)
                   objKontakt.put "mobile" , aUserdaten(12)
                   objKontakt.put "pager" , aUserdaten(13)
                   objKontakt.put "physicalDeliveryOfficeName" , aUserdaten(14)
                   objKontakt.put "postalCode" , aUserdaten(15)
                   objKontakt.put "sn" , aUserdaten(16)
                   objKontakt.put "st" , aUserdaten(17)
                   objKontakt.put "streetAddress" , aUserdaten(18)
                   objKontakt.put "telephoneNumber" , aUserdaten(19)
                   objKontakt.put "title" , aUserdaten(20)
                   objKontakt.SetInfo
            End If                 
    Loop 
objQuelldatei.Close 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-26 11:57:26

不要在csv文件中使用split等。使用ADODB。下面是一个示例:

代码语言:javascript
复制
Option Explicit

Const PATH = "C:\folder\where\csv\sits"
Const FILE = "filename.csv"

Dim cn,rs
Dim val

Set cn = CreateObject("ADODB.Connection")

'if the first line is column names such as UserName, Phone etc, set HDR=YES
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & PATH & ";" & _
          "Extended Properties=""text;HDR=NO;FMT=Delimited"""

Set rs = cn.Execute("Select * From [" & FILE & "]")

While Not rs.EOF
  'if HDR=YES then get columns like this:
  val = rs.Fields.Item("UserName").Value 'where UserName is a header
  'if HDR=NO then get columns like this:
  val = rs.Fields.Item("F2").Value 'gets the second column
  If Not isNull(val) Then
    'do something with the value
    WScript.Echo val
  End If
  rs.MoveNext
Wend 

cn.close
Set cn = Nothing
Set rs = Nothing
WScript.Quit

希望这能为你指明正确的方向,防止“分隔符头痛”。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20215987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档