Domino 9 und frühere Versionen > ND6: Entwicklung

Per LS CSV-Datei importieren

<< < (8/10) > >>

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