Autor Thema: Per LS CSV-Datei importieren  (Gelesen 14786 mal)

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #20 am: 28.08.07 - 07:59:20 »
Hallo Jungens, :D

es wird, es wird. :)
Das Importieren funzt jetzt wie ne eins.
Nur gibt es noch ein kleines Prob, wo ich zwar tricksen kann, aber es dürfte noch einen anderen Weg geben.

In meiner CSV(Userverzeichnis) möchte ich den 1. Wert nicht importieren.
Wie mach ich das, ohne die CSV Dateien zu verändern?
Momentan sieht die erste CSV Zeile so aus:
DN,GN,SN usw.
DN alleine füllt mir aber alleine schon 5 Felder, da dort Username, ID usw, enthalten sind und mit dem jeweils verwendeten Delimeter getrennt sind.

UND

Die erste Zeile wird ja mit importiert. Lass ich die nur in den Ansichten nicht anzeigen oder gibt es da was anderes?

Gruß Jason   
Gruß Jason

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Per LS CSV-Datei importieren
« Antwort #21 am: 28.08.07 - 09:46:32 »
einfach die erste Teile lesen aber nicht verarbeiten:
 Open fileName$ For Input As fileNum%
Line Input #1,  InputStr$       

   Do While Not Eof(fileNum%)
     
  ' Zeile für Zeile einlesen
      Line Input #1,  InputStr$       
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #22 am: 28.08.07 - 13:52:02 »
einfach die erste Teile lesen aber nicht verarbeiten:
 Open fileName$ For Input As fileNum%
Line Input #1,  InputStr$       

   Do While Not Eof(fileNum%)
     
  ' Zeile für Zeile einlesen
      Line Input #1,  InputStr$       

Perfekt. Jetzt tut es. Danke nochmals
Gruß Jason

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #23 am: 10.09.07 - 11:12:43 »
Ich nochmal.
Import funktioniert wie ne Eins.
Nur das verarbeiten der Daten hängt noch.
Auch wenn Notes nicht schuld ist, hoffe ich auf Eure Hilfe.

Ich bekomm die csv Datei von nem Kollegen. Das Trennzeichen ist aber ein Riesenproblem.
Momentan wird die Datei mit ";" als Delimeter übermittelt.

Eine Zeile ist aufgebaut mit : Name;Vorname;Telefon;Zimmernummer; usw.
Hat ein Mitarbeiter jedoch zwei Telefonnummern ist die Datei folgendermaßen aufgebaut: Name;Vorname;"Telefon1;Telefon2";Zimmernummer.......
Und genau da liegt das Problem.
Dacht mir Anfangs, dann nimmst halt "," als Delimeter, aber plötzlich tritt das gleiche Problem bei zwei vorhandenen Zimmernummern auf. Diese sind mit , getrennt.
............"Zimmernummer1,Zimmernummer2",

Meine Frage: Kann ich da mit Notes irgendwas dagegen machen????? ???
Kenn mich mit dem Export bzw. erstellen von csv-Dateien nicht so aus.
Kann mein Kollege problemlos z.B. "$" als Trennzeichen vorgeben?

Hoffe es ist einigermaßen verständlich erklärt.

Viele Grüße Jason
 


 
Gruß Jason

Offline WernerMo

  • @Notes Preisträger
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.050
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #24 am: 10.09.07 - 11:27:22 »
Hallo,

das Problem ist wohl, dass die User in den genannten Feldern selber "Satzzeichen etc. als "Trenner" eingeben. Dann verwende ich gerne als Trennzeichen zwei mal Tilde "~~" oder einmal Pipe "|" unsere User benutzen diese Zeichen nicht in Feldern.

Oder dein Kollege prüft jedes Feld vor der Ausgabe und setzt "unerwünschte Zeichen um z.B. in einen Gedankenstrich".

Gruß Werner
Gruß Werner
  o                                                  o   
 /@\  Nächster @Notes-Stammtisch  /@\  online Sept. 2020?
_/_\__________________________/_\_ Details folgen.

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #25 am: 10.09.07 - 11:49:31 »
Hallo,

das Problem ist wohl, dass die User in den genannten Feldern selber "Satzzeichen etc. als "Trenner" eingeben. Dann verwende ich gerne als Trennzeichen zwei mal Tilde "~~" oder einmal Pipe "|" unsere User benutzen diese Zeichen nicht in Feldern.

Oder dein Kollege prüft jedes Feld vor der Ausgabe und setzt "unerwünschte Zeichen um z.B. in einen Gedankenstrich".

Gruß Werner

OK. Dann werd ich das mal versuchen. Danke  8)
Gruß Jason

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #26 am: 17.09.07 - 13:48:14 »
Sodala. Mal schnell beim Kollegen gewesen.

Hat zwar wenig jetzt mit Notes zu tun, hoffe aber trotzdem auf Eure Hilfe.

Er hat ein Tool (fragt mich bitte aber nicht was für eins 8)) mit dem er die LDAP-Datei in eine CSV umwandelt. Dort hat er lt. seiner Aussage "keine Möglichkeit" einen speziellen Trenner (so wie ich ihn benötige ~~) vorzugeben.

Gibt es da vielleicht andere Tools, bei denen diese Auswahl des Trenners möglich ist.
Hab mal gegoogelt, aber ohne Erfolg.

Mfg
Gruß Jason

Offline tks

  • Senior Mitglied
  • ****
  • Beiträge: 425
  • Geschlecht: Männlich
  • ...für'n Fuss
Re: Per LS CSV-Datei importieren
« Antwort #27 am: 17.09.07 - 15:04:28 »
Wenn er eine CSV macht, dann gibt es doch einen Trenner. CSV = Comma separated value oder? Also müsstest Du eine Textdatei mit Kommas haben. Und die kannst Du doch per x-beliebigem Editor (zur Not notepad) mittels "Suchen & Ersetzen" in "~~" ändern.

Oder habe ich was falsch verstanden?
Thomas

*********************************
Domino 8.5.3FP6 unter W2K12
Notes 8.5.3 unter Win7
sequrIQ (watchdog & crypt)
*********************************

Offline WernerMo

  • @Notes Preisträger
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.050
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #28 am: 17.09.07 - 15:08:51 »
hallo,

aber das ist ja genau das Thema des Thread, dass die user auch im Feld Kommas verwendet haben und dann die Felder verhackstückt werden.

Gruß Werner
Gruß Werner
  o                                                  o   
 /@\  Nächster @Notes-Stammtisch  /@\  online Sept. 2020?
_/_\__________________________/_\_ Details folgen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #29 am: 17.09.07 - 15:13:09 »
So, wie das Beispiel aber aussieht, scheint die Ausgabe doch eindeutig zu sein: Mehrfachwerte stehen in Anführungszeichen. Und dann ist es ja ein ganz leichtes, diese zu erkennen und den Inhalt entsprechend zu verarbeiten. So ein ganz einfaches Parsileinichen  :)

Bernhard

Offline tks

  • Senior Mitglied
  • ****
  • Beiträge: 425
  • Geschlecht: Männlich
  • ...für'n Fuss
Re: Per LS CSV-Datei importieren
« Antwort #30 am: 17.09.07 - 15:20:05 »
O.K. nur die Hälfte gelesen. Sorry.

Also wenn Kommas als Satzzeichen im Text vorkommen, habe ich mir bisher immer so beholfen (aber nur wenn man das nicht täglich machen muss):

1. Im Text stehen die Kommas i.d.R. vor einem Leerzeichen (also ,_). Also "Suchen & Ersetzen" von ,_ in z.B. #_. Die als Spaltentrenner gedachten Kommas bleiben damit stehen. Leider natürlich auch die Tippfehler der User.

2. Kommas durch gewünschtes Trennzeichen ersetzen (, in ~~).

3. Aus #_ wieder ,_.


Wenn die Werte immer mit " enden. ", durch "~~ ersetzen?
Thomas

*********************************
Domino 8.5.3FP6 unter W2K12
Notes 8.5.3 unter Win7
sequrIQ (watchdog & crypt)
*********************************

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #31 am: 17.09.07 - 15:22:42 »
Hallo Leute,

grds. geht das ja mit Suchen/Ersetzen.
Aber das ist halt wieder ein Schritt mehr nach dem Export via LDAP.

Kenn mich wie bereits erwähnt in dem Bereich nicht so aus.
Habe mir nur vorgestellt, dass es dann vielleicht ein Tool gibt, wo man Dateien (LDAP) exportiert und dem Tool sagt: Paß auf als Trenner machst Du ~~ und es tut dann.

Ich importiere dann via LS die Daten und fertig ist das Ganze.
Gruß Jason

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #32 am: 20.09.07 - 10:42:31 »
Keiner einen Tipp für so ein Tool::) ??? :-\ :-:
Gruß Jason

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #33 am: 20.09.07 - 10:44:48 »
Was fehlt Dir denn noch? Du musst doch nur zeilenweise analysieren und daraus Deine Felder befüllen.

Bernhard

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #34 am: 20.09.07 - 10:56:04 »
Was fehlt Dir denn noch? Du musst doch nur zeilenweise analysieren und daraus Deine Felder befüllen.

Bernhard

Mir fehlt das Tool, das beim LDAP auslesen ~~als Trenner vorgibt

Mfg
Gruß Jason

klaussal

  • Gast
Re: Per LS CSV-Datei importieren
« Antwort #35 am: 20.09.07 - 13:12:10 »
Es scheint das Tool entweder nicht zu geben oder keiner kennt so etwas  :'(

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Per LS CSV-Datei importieren
« Antwort #36 am: 20.09.07 - 13:29:14 »
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.......
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.



HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline lotus blue

  • Aktives Mitglied
  • ***
  • Beiträge: 223
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #37 am: 21.09.07 - 07:45:07 »
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
« Letzte Änderung: 21.09.07 - 07:47:05 von lotus blue »
Gruß Jason

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Per LS CSV-Datei importieren
« Antwort #38 am: 21.09.07 - 10:22:28 »
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

  • Gast
Re: Per LS CSV-Datei importieren
« Antwort #39 am: 21.09.07 - 10:27:31 »
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz