2013-11-26 2 views
1

У меня есть csv-файл, содержащий контакты. Эти контакты должны быть импортированы через vb-Script в Exchange-Server. Проблема заключается в том, что исходный файл содержит символы, которые интерпретируются в качестве разделителя:Как удалить символы и игнорировать разделитель?

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

В первой строке это «Schmitt, Майкл». Во второй строке это «Резервное копирование, сеть». Как удалить кавычки и убедиться, что запятые не интерпретируются как разделитель.

Мой первый подход состоял в том, чтобы использовать регулярное выражение для очистки данных до его импорта, что невозможно.

Это мой сценарий на данный момент:

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

Dont использовать 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 

Надеюсь, это будет указывать вам в правильном направлении и предотвратить «разделителей головной боли»

Смежные вопросы