2013-11-26 45 views
1

我有一個包含聯繫人的csv文件。這些聯繫人應通過vb-Script導入到Exchange服務器中。問題是源文件包含符號被解釋爲分隔符:如何刪除字符並忽略分隔符?

Germany,Seehger,Warehouse,Seehger,"Schmitt, Michael",,Michael,,,,,[email protected],,,,61462,Rosbach,,Frankfurter Strasse 243,,Warehouse 
,,,,"Backup, Network",,Network,,,,,[email protected],,,,,Backup,,,, 

第一行是「Schmitt,Michael」。第二行是「備份,網絡」。如何刪除引號並確保逗號不被解釋爲分隔符。

我的第一種方法是使用正則表達式在數據導入前清理數據,這是不可能的。

這是我此刻的腳本:

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 
+1

爲什麼這個標籤「的VBScript/vb.net」?不能真的都是 – Jobbo

+0

@Jobbo:​​據此編輯。對不起。 –

回答

4

不使用split等使用CSV文件。使用ADODB。這裏有一個例子:

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 

希望這將指向您在正確的方向,防止出現「分隔符頭痛」