Domino 9 und frühere Versionen > ND6: Entwicklung
Per LS CSV-Datei importieren
klaussal:
Es scheint das Tool entweder nicht zu geben oder keiner kennt so etwas :'(
m3:
Ein anderes Tool einzusetzen, um LDAP direkt auszulesen hat Ulrich schon auf Seite 1 angeführt -- damit würde die ganze Diskussion um CSV-Parsen ein Ende haben.
Aber wenn das nicht verwendet werden kann ...
Wie wärs, wenn Du mal so eine "problematische" Zeile aus dem CSV-File hier postest, damit wir das Problem mal sehen?
Wenn es sich immer noch um Zeilen wie
--- Code: ---Name;Vorname;"Telefon1;Telefon2";Zimmernummer.......
--- Ende Code ---
handelt, ist die Lösung relativ einfach.
Vor dem Split alle ";" die zwischen zwei Anführungszeichen stehen, durch was anderes wie etwa "~~" ersetzen -- dann stolpert Split nicht mehr.
lotus blue:
Hier ein Auzug aus meiner CSV-Datei die ca. 1800 Zeilen enthält und "," als Trenner hat.
Erste Zeile: DN,sn,l,telephoneNumber,gn,mail,roomNumber,org8,org7,org6
so sieht der normal Fall aus:
cn=Test User 12345678,ou=Users,ou=Firma,o=Europäische,c=DE,Test,Berlin,+49 030 12 3456,User,test.user@ep.de,1234,Angestellter,Referat Organisation,Verwaltung
Hier mal Daten die beim Feld org7 mit "" getrennt sind, da die Kollegin für 2 Abteilungen zuständig ist:
cn=Mustermann Renate 10111,ou=Users,ou=Firma,o=Europäische,c=DE,Mustermann,Düsseldorf,+49 123456,Renate,renate.mustermann@ep.de,1234,Bankkauffrau,"Verwaltung,Controlling",Personalabteilung
Und hier ein Fall mit 2 Sonderfällen einmal ";" und "" als zusätzlichem Trenner, weil der Kollege 2 Telfonnummern, 2 Zimmernummer hat und für 3 Abteilungen zuständig ist:
cn=König Ralf 11111,ou=Users,ou=Firma,o=Europäische,c=DE,König,Stuttgart,+49 123456;+49 1234577,Ralf,,123;588,Angestellter,"Referat 1, 2, 3",Kreditabteilung
Das ist der Code dazu:
Sub Initialize
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim fileNum As Integer, cells As Integer, k As Long
Dim fileName As String
Dim InputStr As String, delimiter As String
Dim FieldArray As Variant
Set db = session.currentdatabase
fileNum% = Freefile()
' Dateipfad
fileName$ = "H:\kommatest.csv"
' Trennzeichen
delimiter = ","
Open fileName$ For Input As fileNum%
Line Input #1, InputStr$
Do While Not Eof(fileNum%)
' Zeile für Zeile einlesen
Line Input #1, InputStr$
FieldArray = Split(InputStr$,delimiter)
Call CreateDocument(db, FieldArray)
Loop
Close fileNum%
Exit Sub
End Sub
Sub CreateDocument(db As notesdatabase, FieldArray As Variant)
Dim doc As New notesdocument(db)
doc.Form = "Main"
doc.DN = FieldArray(0)
doc.DN1 = FieldArray(1)
doc.DN2 = FieldArray(2)
doc.DN3 = FieldArray(3)
doc.DN4 = FieldArray(4)
doc.sn = FieldArray(5)
doc.l = FieldArray(6)
doc.telephoneNumber = FieldArray(7)
doc.gn = FieldArray(8)
doc.mail = FieldArray(9)
doc.roomNumber = FieldArray(10)
doc.org8 = FieldArray(11)
doc.org7 = FieldArray(12)
doc.org6 = FieldArray(13)
Call doc.save(1,0)
End Sub
koehlerbv:
Das ist doch ordentlich und sauber getrennt ... Nur nicht schön (weil nicht immer Anführungszeichen verwendet werden bei Mehrfachwerten)..
Die Lösung ist doch einfach:
- zeilenweise einlesen
Die Zeile Zeichen für Zeichen auseinanderflöhen:
- Lesen bis zum nächsten Komma
- Wenn ein Anführungszeichen kommt, nichts mehr auswerten bis zum nächsten Anführungszeichen
- Den erhaltenen Teilstring analysieren:
- In Anführungszeichen? Anführungszeichen entfernen, Split mit Komma
- Keine Anführungszeichen? Split mit Semikolon
Bernhard
klaussal:
Vielleicht hilft ja dieses Stückchen Code:
--- Code: --- ' "," aus dem zu konvertierenden Text entfernen
char = ""
varvalnew = ""
If Instr(1, varval, ",") <> 0 Then
For x = 1 To Len(varval)
char = Mid(varval, x, 1)
If char <> "," Then varvalnew = varvalnew + char
Next
varval = varvalnew
End If
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln