Hallo Leute,
muss einen Agent schreiben mit Hilfe der @Formula language schreiben der eine *.csv Datei ( z.B. Inhalt: werner, 12345, 53698, kdjfdkj usw.) erstmal nur ausliest
Bitte HILFE !!!
@Formula -> csv-Datei auslesen
- client
- Erledigt
-
-
Ich denke ohne LS wirst du nicht allzu weit kommen. Notes kann ja nur Structured Text, Tabbed Text und 123 Files von Hause aus verarbeiten und mit @Formeln hast Du keinen direkten Dateizugriff.....
-
Hallo,
erstmal danke.
hab mich mit LS auseinander gesetzt
mit dem agenten kann ich jetzt auf die dtei zugreifen.
jetzt muss ich die daten , die durch komma getrennt sind, den variablen übergeben ( jeweils ein string pro variable ohne komma und leerzeichen)...
wie mache ich das den ??
danke... -
Parsen...
Du könntest z.B. mit Split() den String aufteilen in ein Array und dann die einzelnen Elemente in die entsprechenden Felder speichern. (geht natürlich nur, wenn die Feldwerte keine Trennzeichen enthalten).
oder sieh mal unter
periodischer Agent -
Hier ein Beispiel wie du mit LotusScript CSV-Files parsen kannst:
intAnzahl =0
impfile = "C:\test.csv"
intNum = Freefile()
Open impfile For Input As intNumDo While Not Eof(intNum)
Line Input #intNum, strZeile
strOrder = Strtoken(strZeile, "|",1)
strStatus = Strtoken(strZeile, "|",2)
Print "Bestellung " & strOrder & " Status: " & strStatus
LoopMeine CSV ist wie folgt aufgebaut:
13245|2
45678|4lg,
ayhan -
danke
den ersten Teil meiner Aufgabe hab ich schon gelöst...
hier mein ergebnis:Sub Initialize
Dim Kunden List As Long
Dim pfad As String
pfad ="c:\*.csv"
filenum=Freefile()
Open pfad For Input As filenum
i=0
Do While Not Eof(filenum)
Input #filenum, kunden(i)
i=i+1
Loop
Forall x In Kunden
Msgbox x
End ForallClose filenum
Erase kunden ' löscht die Daten (Kunden List)
End Sub -
Super! Freut mich.
lg,
ghostxxl -
und weiter gehts...
ich habe den const pfad definiert:
pfad ="g:\Kunden.csv"gibt es möglichkeiten dass ich selbst nach der Datei suche sowas wie " Datei öffnen ... "usw. (mit netzwerkzugriff z.B.windows-explorer) ???
hab nur das hier als alternative gefunden:
pfad=Inputbox ("Bitte geben Sie den Pfad ein:")
ist aber sch..e weil ich die dateiendung mit eingeben muss -
Sicher:
Dim ws As New NotesUIWorkspace
v_ReturnValue = ws.OpenFileDialog(False, "Wählen Sie eine CSV-Datei aus", "CSV Files|*.CSV", "C:\")
If Not Isarray(v_ReturnValue) Then Exit Sub
'If v_ReturnValue(0) = "" Then Exit Sub
fileName = v_ReturnValue(0)Au ja:
Da hier die Frontend-Klasse (NotesUIWorkspace) verwendet wird, ist auch klar, dass der Agent nicht periodisch laufen kann. Muss also manuell ausgeführt werden - nur so zur Info...lg,
ghostxxl -
vielen dank !!!
funktionieren tut es auch
verstehen tue ich nur die ersten paar zeilen den rest nicht mehr
Dim ws As New NotesUIWorkspace
v_ReturnValue = ws.OpenFileDialog(False, "Wählen Sie eine CSV-Datei aus", "CSV Files|*.CSV", "C:\") -> das hier ist klarund das hier garnicht:
If Not Isarray(v_ReturnValue) Then Exit Sub
'If v_ReturnValue(0) = "" Then Exit Sub
fileName = v_ReturnValue(0) -
Einfacher als du denkst,
es wird nur überprüft, ob der Benutzer in diesem Dialog auch eine CSV-Datei ausgewählt hat (er könnte ja auch nur auf abbrechen gehen und dann würde das - wenn es nicht abgefangen wird - zu fehlern in deinem code führen).Einfache Erklärung ohne kompliziert zu werden:
"If Not Isarray(v_ReturnValue) Then Exit Sub"
Da v_ReturnValue vom Typ Constant definiert wird und eigentlich nur den kompletten Pfad der CSV zurückgeben soll, wird überprüft, ob die Variable belegt ist. Wenn nein, soll die Ausführung des Codes abgebrochen "Exit Sub" werden."fileName = v_ReturnValue(0)"
Wenn die Variable nicht leer ist, wird die Variable fileName mit der Variable v_ReturnValue (1. Element des Arrays v_ReturnValue --> v_ReturnValue(0)) belegt.Es ist die einfachste Erklärung, hoffe das hilft dir.
lg,
ghostxxl -
jetzt ist es mir klar Danke!
muss jetzt in der DB nach einem doc suchen der diese Kundennummer im Feld Number beinhaltet ...
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedFTSearch( ??? )
For i=0 To Eof
For c = 1 To collection.Count
Kunde(i) =FIELD (Number)
Next
Next
Ähhh...
jetzt blick ich ja selbst nicht mehr durch... :-? -
Hy,
ftsearch dauert doch immer so lang. Ich würde folgendes machen:
1. Erstelle eine Ansicht. Die erste Spalte sollte kategorisiert sein. Der Wert für diese Spalte sollte die Kundennummer beinhalten. Zeige in der Ansicht alle Dokumente an, die du später über deinen Script auch bearbeiten möchtest.
2. In deinem Script gehst du dann wie folgt vor:
Dim coll As NotesDocumentCollection
Dim view As NotesViewSet view = db.GetView("deineansicht")
Set coll = view.GetAllDocumentsByKey("12345", True) 'alle Dokumente mit dieser Kundennummer in coll holenIf coll.Count > 0 Then
Set doc = coll.GetFirstDocument
For i = 0 To (coll.Count - 1)
<aktion>
Set doc = coll.GetNextDocument(doc)
End Forall
End Ifusw.
Das geht dann viel viel schneller und auch einfacher zum Programmieren. Hoffe, das hilft dir.
P.S. Den Code habe ich hier einfach runtergeschreiben. Evtl. sind rechtschreibfehler drin bzw. nicht alle variablen initialisiert..
lg,
ghostxxl -
Hallo,
ich glaube ich habe mich da vertan...
es soll nach einem dokument (parent) gesucht werden der diese Kundennummer enthält. bei übereinstimmung sollte es noch ein paar werte aus dem doc auslesen und in eine externe datei reinschreiben. nächste KD-Nr/ und wieder das gleiche usw... -
vorschläge wie ich das machen könnte ?
das hier funktioniert nicht so ganz...
ich glaube es wird garnicht auf das dokument zugegriffen...Dim anzahl As Long
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.AllDocuments
anzahl= collection.Count
Set doc = collection.getfirstdocument
Msgbox anzahl
Dim inhalt As String
i=0
a=0
Do
Set doc = collection.GetNthDocument( a )
Msgbox Kunden_Num
inhalt=Cstr(Kunden_Num) ' Das Feld Kunden_Num ist ein "Number"-Feld
If kunden(i) =Cstr( inhalt) Then
Msgbox kunden(i)
End If
a=a+1
Loop Until a=anzahl -
Um gottes willen schreib diese routine um von GetNthDocument auf einen GetFirstDocument & GetNextDocument kombination, der GetNthDocument ist der umproduktivste aufruf die mann sich nur vorstellen kann. Der macht folgendes, JEDESMAL.. greif das erste dokument in der Kollection, und zähle solange durch den einzelne dokumente bis du beim Nth angekommen bist. KEIN SCHERZ.
Diese routine ist schon messbar langsamer wenn der collection 10 Dokumente beinhaltet, auf dem moment würde den GetFirt/Next 55 dokumente in den gleichen zeit verarbeiten. Bei 50 Dokumente schon über 1200 mit First/Next -
hallo,
kann ich den meine csv-datei (bevor ich die durch komma getrennte daten auslese) trimmen?
oder muss ich den kompletten inhalt einer variable übergeben, dann trimmen und dann aus der variable auslesen ? -
Entweder du entfernst unnötige Leerzeichen bereits vor dem Export (ist vielleicht einfacher) oder eben erst nach dem Einlesen. Da es sich hier um binäres Lesen von Daten handelt werden immer alle Leerzeichen mitgelesen und du mußt die Behandlung selbst durchführen, also innerhalb der Variablen.
-
wie kann ich die leerzeichen vor dem export entfernen ?
-
mit Trim() in Lotusscript oder mit @trim() als Funktion
Gruß
Dirk