Autor Thema: Import von csv Daten innerhalb einen DB  (Gelesen 5959 mal)

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Import von csv Daten innerhalb einen DB
« am: 31.03.04 - 12:23:21 »
Hallo Leute,

ich habe jetzt schon seid einer knappen Stunde das ganze Forum durchsucht, ohne Erfolg.
Ich hoffe ihr könnt mit weiter helfen.
Folgendes Problem:

Diverse Tools fragen in bestimmten Zeitabschnitten eine IP Range nach Druckern ab. Diese Daten werden gesammelt
und im csv style an eine Notes Inbox geschickt.

drucker1;domain1;1.1.1.1;yes;yes;yes;128MB;5
drucker2;domain2;2.2.2.2;yes;yes;yes;96MB;5
drucker3;domain3;3.3.3.3;no;no:no;96MB;2

Jetzt möchte ich gerne diese Daten mittels Agentenin ein Notes Formular innerhalb dieser DB importieren/kopieren
(dokument drucker1, dokument drucker2, dokument drucker3).
Hat irgend jemannd eine Idee oder vieleicht sogar ein Beispiel?
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Import von csv Daten innerhalb einen DB
« Antwort #1 am: 31.03.04 - 12:59:17 »
Hi,

such mal in der Sandkiste nach csv. Dort findest einige Beispiele.

http://www-10.lotus.com/ldd/sandbox.nsf?OpenDatabase


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re:Import von csv Daten innerhalb einen DB
« Antwort #2 am: 31.03.04 - 13:08:08 »
Hi,

habe ich auch schon gemacht, dort gibt es nur Beispiele wie ich csv Textdateien in ein Dok bekomme.

Ich möchte ja aus dem Inhalt einer Note ein Dok erstellen.
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

klaussal

  • Gast
Re:Import von csv Daten innerhalb einen DB
« Antwort #3 am: 31.03.04 - 13:15:41 »
... sollen beim import neue docs erstellt werden, oder wie oder was ?

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re:Import von csv Daten innerhalb einen DB
« Antwort #4 am: 31.03.04 - 13:22:49 »
ja klar, für jeden Drucker ein Dok.
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

klaussal

  • Gast
Re:Import von csv Daten innerhalb einen DB
« Antwort #5 am: 31.03.04 - 13:29:14 »
... wenn das jetzt im klartext heissen soll, dass, wenn der agent/die agentin läuft, jedesmal neue docs erstellt werden sollen, dann sollten die beispiele aus der sandkiste dich zum ziel bringen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Import von csv Daten innerhalb einen DB
« Antwort #6 am: 31.03.04 - 15:36:38 »
Fragen wir mal anders herum (da das Problem ja an sich trivial ist, ein bisschen Parserbau): Wo klemmt es denn ? Wo fehlt Dir der Ansatz ?

Bernhard

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re:Import von csv Daten innerhalb einen DB
« Antwort #7 am: 31.03.04 - 16:18:27 »
Hallo,

mh naja, ich denke mal das lässt sich nur über Lotus script realisieren, und davon habe ich leider noch nicht so die Ahnung.
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Import von csv Daten innerhalb einen DB
« Antwort #8 am: 31.03.04 - 16:33:58 »
Da hast Du wahr - das lässt sich nur über LotusScript (oder Java) lösen. Du hast ja bei einem server based agent allein schon null Chance, neue Dokumente zu erstellen. Von den anderen needs mal ganz zu schweigen.

Wie sieht das bei Euch mit einer Fremdvergabe eines solchen Agentleins aus ? Das wäre ja nach Deiner bisherigen Beschreibung sehr, sehr schnell erledigt ...

Bernhard

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re:Import von csv Daten innerhalb einen DB
« Antwort #9 am: 31.03.04 - 18:22:51 »
Hallo zusammen,

ich glaube ich habe jetzt genau das gefunden was ich brauche. Das Script holt sich zwar nicht die Daten auf einer Mail sondern aus einen lokal liegenden csv Datei, aber das sollte für den Anfang reichen.

Das script nennt sich "csv import" und ist hier zu finden -> http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/7d3285a6721418ed85256df2006561e9?OpenDocument&Highlight=0,csv
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Import von csv Daten innerhalb einen DB
« Antwort #10 am: 31.03.04 - 18:27:36 »
Zitat
Diese Daten werden gesammelt
und im csv style an eine Notes Inbox geschickt

können den die "diversen Tools" nicht gleich pro Drucker ein Doc verschicken ??

Nur mal so ein Gedanke...

Ulrich
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Import von csv Daten innerhalb einen DB
« Antwort #11 am: 31.03.04 - 18:42:27 »
Ob eins oder n - das ist doch wurscht. Auseinandergebröselt gehört es sowieso ...

Bernhard

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re:Import von csv Daten innerhalb einen DB
« Antwort #12 am: 01.04.04 - 10:43:54 »
Hallo,

ich habe gestern Abend noch (nach langen probieren) das "csv import" script in meine DB implementiert, und ich muss sagen, dass ding ist genial.
Der große Vorteil des scripts ist, dass es nicht nur Doks anlegt, sondern auch löscht bzw. aktualisiert.  8)

Aber die Lösung Text aus einer Notes Memo in ein Notes Dok umzuwandeln beschäfftigt mich immer noch..... ???
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline scipio

  • Junior Mitglied
  • **
  • Beiträge: 57
  • Ich liebe dieses Forum!
Re: Import von csv Daten innerhalb einen DB
« Antwort #13 am: 21.10.04 - 13:08:39 »
Ist zwar schon ein älterer Thread, habe die Datei aus der Sandbox in einem aktuellen Projekt eingesetzt. Da das Script nicht lief, habe ich die bei mir auftretenden (Notes 5.0.11) Bugs im Originalscript der Sandbox gefixt:

- Der erste Primärschlüssel der CSV-Datei wird erkannt.
- Die Erkennung „Mit“ oder „Ohne Textbegrenzungszeichen“ funktioniert jetzt.
- Die globalen Einstellungen stehen im Agenten, nicht im Script der Scriptbibliothek.
- Kommentare eingedeutscht.
- Der letzte Fehler fällt mir gar nicht mehr ein ;-)

Anleitung:

- Neue Datenbank.
- Maske mit Namen ‚F_NAME’ erstellen.
- In dieser Maske die Felder ’SSN’, ‚FIRST’ und ‚LAST’ erstellen.
- Ansicht mit Namen ‚ V_LOOKUPBYSSN’ erstellen.
- Drei Spalten namens ’SSN’, ‚FIRST’ und ‚LAST’ erstellen und mit den gleichnamigen Feldern füttern.
- Agenten erstellen (Werte siehe unten).
- Script-Bibliothek erstellen (Werte unten).
- Agent starten, CSV wählen und warten.

Hoffe, ich habe nix vergessen.

Agent 'CSV-Import'

Wann soll dieser Agent gestartet werden:
Manuell aus dem Menü 'Aktionen'

Options:

Code
Option Public
Use "import"

Initialize:

Code
'Original Script by LDD user [http://www.cadencesolutions.com/]
'Sandbox [http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/7d3285a6721418ed85256df2006561e9?OpenDocument&Highlight=0,csv]
Dim csv As CSVFile
Dim st_Fields(1 To 3) As String
st_Fields(1) = "SSN"
st_Fields(2) = "FIRST"
st_Fields(3) = "LAST"
Set csv = New CSVFile("","F_NAME", st_Fields)
' WENN DIE WERTE SYNCHRONISIERT WERDEN SOLLEN (VERGLEICH, OB DATEN AKTUELL), DANN 'TRUE', ANSONSTEN 'FALSE'
csv.Synchronize = True
    'NAME DER ANSICHT, DIE ZUR SYNCHRONISATION BENUTZT WERDEN SOLL
csv.SynchronizeView = "V_LOOKUPBYSSN"
'WENN DOKUMENTE GELÖSCHT WERDEN SOLLEN, SOBALD SIE IN DER CSV-DATEI FEHLEN, DANN 'TRUE', ANSONSTEN 'FALSE'
csv.SynchronizeDeletions = True
    'WENN DIE CSV-DATEI EINE TITELZEILE BESITZT, DANN 'TRUE', ANSONSTEN 'FALSE'
csv.SkipTitleLine = True
'MIT WELCHEM ZEICHEN WERDEN DIE DATEN IN DER CSV-DATEI VONEINANDER GETRENNT
csv.Delimiter = ","
csv.NumChanges = 0
csv.NumAdds = 0
csv.NumDeletes = 0
Call csv.Import

Script-Bibliothek ''import'

Options:

Code
Option Public

Declarations:

Code
Class CSVFile
Public FileName As String
Public Delimiter As String
Public ImportDatabase As NotesDatabase
Public ImportForm As String
Public ImportFields As Variant   ' ARRAY  DER FELDNAMEN - INDEX MUSS MIT 1 STARTEN
Public RefreshForm As Variant
Public ShowProgress As Variant
Public QuoteDelimiter As Variant  ' IST EIN DOPPELTER ANFÜHRUNGSSTRICH, DER VERWENDET WIRD, UM WERTE MIT KOMMAS ZU TRENNEN
Public Synchronize As Variant     ' SOLLTE IMPORT ANHAND PRIMÄRSCHLÜSSEL SYNCHRONISIERT WERDEN
Public NumKeyFields As Integer  ' WIE VIELE DER ERSTEN FELDER SIND PRIMÄRSCHLÜSSEL
Public SynchronizeView As String ' NAME DER ANSICHT, MIT DER DIE PRIMÄRSCHLÜSSEL SYNCHRONISIERT WERDEN
Public SynchronizeDeletions As Variant
Public SkipTitleLine As Variant
Public NumChanges As Integer
Public NumAdds As Integer
Public NumDeletes As Integer
Private SynchUNIDS List As String
Sub New(st_FileName As String, st_FormName As String, v_FieldArray As Variant)
Dim lib_s As New NotesSession
Dim lib_ws As New NotesUIWorkspace
Dim v_ReturnValue As Variant
If Trim(st_FileName) = "" Then ' WENN KEINE DATEI VORGEGEBEN WERDEN, NACH DATEI FRAGEN
v_ReturnValue =  lib_ws.OpenFileDialog(False, "Wählen Sie eine CSV Datei", "CSV Files|*.CSV", "C:\")
If Not Isarray(v_ReturnValue) Then Exit Sub
If v_ReturnValue(0) = "" Then Exit Sub
st_FileName = v_ReturnValue(0)
End If
Me.FileName = st_FileName
Set Me.ImportDatabase = lib_s.CurrentDatabase
Me.ImportForm = st_FormName
Me.ImportFields = v_FieldArray
Me.RefreshForm = True
Me.ShowProgress = True
Me.QuoteDelimiter = True
Me.NumKeyFields = 1
Me.NumChanges = 0
Me.NumAdds = 0
Me.NumDeletes = 0
End Sub
Sub Import
Dim i_FileNum As Integer
Dim st_LineData As String
Dim i_ImportCount As Integer
Dim vw_Lookup As NotesView
Dim doc_List As NotesDocument
If Trim(Me.FileName) = ""  Then
Messagebox "Kein Dateiname spezifiziert.", 16, "Error"
Exit Sub
End If
If Me.Synchronize Then
Set vw_Lookup =  Me.ImportDatabase.GetView(Me.SynchronizeView)
If vw_Lookup Is Nothing Then
Messagebox "Unzulässige Synchronisationsansicht.", 16, "Error"
Exit Sub 
End If   
Call vw_Lookup.Refresh ' ERNEUERT DIE ANSICHT, DAMIT ALLE NEUEN DATEN SICHTBAR SIND.
If Me.SynchronizeDeletions Then
    ' ERSTELLT LISTE
Set doc_List = vw_Lookup.GetFirstDocument
Do While Not doc_List Is Nothing
Me.SynchUNIDS(doc_List.UniversalID) = False
Set doc_List  = vw_Lookup.GetNextDocument(doc_List)
Loop   
End If
End If
If Not Isarray(Me.ImportFields) Then
Messagebox "Unzulässiger Feldnamen-Array.", 16, "Error"
Exit Sub
End If
i_FileNum = Freefile()
Open Me.FileName For Input As i_FileNum
i_ImportCount = 0
' DIE TITELLINIE WIRD IN DER CSV-DATEI ÜBERSPRUNGEN (WENN WERT AUF 'TRUE')
If Not Eof(i_FileNum) And Me.SkipTitleLine Then Line Input #i_FileNum, st_LineData     
Do While Not Eof(i_FileNum)
i_ImportCount = i_ImportCount + 1
If Me.ShowProgress Then Print "Importiere Datensatz # " & Cstr(i_ImportCount)
Line Input #i_FileNum, st_LineData ' HOLT EINE DATEN-ZEILE AUS DER DATEI
If Not Me.Synchronize Then
If Not ImportLine(st_LineData) Then
Messagebox "Fehler beim Import.", 16, "Error"
Close i_FileNum
Exit Sub
End If
Else
If Not SynchLine(st_LineData) Then
Messagebox "Fehler bei der Synchronisation.", 16, "Error"
Close i_FileNum
Exit Sub
End If
End If
Loop
Close i_FileNum
If Me.Synchronize And Me.SynchronizeDeletions Then
Forall x In Me.SynchUNIDS
If x = "False"  Then ' WENN DER WERT DER ANSICHT NICHT IN DER CSV-DATEI GEFUNDEN WIRD, DATENSATZ LÖSCHEN
Call Me.ImportDatabase.GetDocumentByUNID(Listtag(x)).Remove(True)
Me.NumDeletes = Me.NumDeletes + 1
End If
End Forall   
End If
Print "Import vollständig. " & Cstr(i_ImportCount) & " Datensätze verarbeitet. " & Cstr(Me.NumAdds) & " hinzugefügt " & Cstr(Me.NumChanges) & " geändert " &  Cstr(Me.NumDeletes) & " gelöscht" 
End Sub
 ' IMPORTIERT DIE DATEN - ERSTELLT EIN NEUES DOKUMENT FÜR JEDE LINIE
Private Function ImportLine(st_LineData As String) As Variant
Dim v_ValueArray As Variant
Dim i As Integer
Dim doc_Current As NotesDocument
ImportLine = True
v_ValueArray = ReturnValueArray(st_LineData)  ' FASST DIE DATEN IN EINEN ARRAY
Set doc_Current = Me.ImportDatabase.CreateDocument
For i = Lbound(Me.ImportFields) To Ubound(Me.ImportFields)
Call doc_Current.ReplaceItemValue(Me.ImportFields(i), v_ValueArray(i))
Next
doc_Current.Form = Me.ImportForm
If Me.RefreshForm Then Call doc_Current.ComputeWithForm(False, True)
Call doc_Current.Save(True, False)
End Function
 ' IMPORTIERT DIE DATEN - SYNCHRONISIERT DAS DOKUMENT AUF BASIS DER PRIMÄRSCHLÜSSEL
Private Function SynchLine(st_LineData As String) As Variant
Dim v_ValueArray As Variant
Dim v_Key As Variant
Dim v_TempKey (1 To 10) As Variant
Dim i As Integer
Dim doc_Current As NotesDocument
Dim vw_Lookup As NotesView
Dim v_FieldChange As Variant
SynchLine = True
v_ValueArray = ReturnValueArray(st_LineData)  ' BREAK UP THE DATA INTO AN ARRAY
  ' ERSTELLT DEN SCHLÜSSEL
For i = 1 To Me.NumKeyFields
v_TempKey(i) = v_ValueArray(i)
Next
'v_Key = Fulltrim(v_TempKey)
  ' INSTANZIIERT DIE ANSICHT
Set vw_Lookup = Me.ImportDatabase.GetView(Me.SynchronizeView)
  ' DURCHSUCHT DIE ANSICHT
'Set doc_Current = vw_Lookup.GetDocumentByKey(v_Key, True)
Set doc_Current = vw_Lookup.GetDocumentByKey(v_ValueArray(1), True)
If doc_Current Is Nothing Then  ' ERSTELLT EIN NEUES DOKUMENT
Set doc_Current = Me.ImportDatabase.CreateDocument
For i = Lbound(Me.ImportFields) To Ubound(Me.ImportFields)
Call doc_Current.ReplaceItemValue(Me.ImportFields(i), v_ValueArray(i))
Next
doc_Current.Form = Me.ImportForm
If Me.RefreshForm Then Call doc_Current.ComputeWithForm(False, True)
Call doc_Current.Save(True, False)
Me.NumAdds = Me.NumAdds + 1
Else ' WENN EIN DOKUMENT MIT DEM GLEICHEN PRIMÄRSCHLÜSSEL GEFUNDEN WIRD > PRÜFT, OB NOTWENIGKEIT ZUR AKTUALISIERUNG GEGEBEN IST.
If Me.SynchronizeDeletions Then
Me.SynchUNIDS(doc_Current.UniversalID) = True ' MARKIERT DAS DOKUMENT, SO DASS ES NICHT GELÖSCHT WIRD
End If
v_FieldChange = False
For i = Lbound(Me.ImportFields) To Ubound(Me.ImportFields)
If Cstr(doc_Current.GetItemValue(Me.ImportFields(i))(0)) <> Cstr(v_ValueArray(i)) Then
v_FieldChange = True
Call doc_Current.ReplaceItemValue(Me.ImportFields(i), v_ValueArray(i))
End If
Next
If v_FieldChange Then
If Me.RefreshForm Then Call doc_Current.ComputeWithForm(False, True)
Call doc_Current.Save(True, False)
Me.NumChanges = Me.NumChanges + 1
End If
End If
End Function
Private Function ReturnValueArray(st_LineData) As Variant   ' FASST EINE ZEILE DER CSV-DATEI IN EINEN ARRAY
Dim i As Integer
Dim doc_Current As NotesDocument
Dim i_NextDelimiter As Integer
Dim v_DoubleQuotes As Variant
Dim v_ValueArray(1 To 150) As Variant
For i = 1 To Ubound(Me.ImportFields)
v_DoubleQuotes = False
If Me.QuoteDelimiter = True And Left(st_LineData, 1) = Chr(34) Then ' WENN WERT IN DOPPELTEN ANFÜHRUNGSSTRICHEN STEHT
i_NextDelimiter = Instr(st_LineData,Chr(34) & Me.Delimiter) ' SCHLIESSENDES TRENNZEICHEN IST EIN ANDERER SATZ VON DOPPELTEN ANFÜHRUNGSSTRICHEN + TRENNZEICHEN
v_DoubleQuotes = True
Else
i_NextDelimiter = Instr(st_LineData, Me.Delimiter)     
End If
If i_NextDelimiter = 0 Then '  KEIN TRENNZEICHEN MEHR GEFUNDEN, SO DASS ES DER LETZTE WERT SEIN MUSS
If v_DoubleQuotes Then
v_ValueArray(i) = Mid(st_LineData, 2, Len(st_LineData) - 2) ' ENTFERNT DOPPELTE ANFÜHRUNGSSTRICHE
Else
v_ValueArray(i) = st_LineData
End If   
Exit For
End If
If v_DoubleQuotes Then
v_ValueArray(i) =  Mid(st_LineData, 2, i_NextDelimiter - 2)
Else
v_ValueArray(i) =  Trim(Left(st_LineData, i_NextDelimiter - 1))
End If
If v_DoubleQuotes = True Then
st_LineData = Trim(Mid(st_LineData, i_NextDelimiter + 2))
Else
st_LineData = Trim(Mid(st_LineData, i_NextDelimiter + 1))
End If
Next
ReturnValueArray = v_ValueArray
End Function
End Class
« Letzte Änderung: 21.10.04 - 13:16:34 von scipio »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz