Hallo,
ich exportiere periodisch aus einer Notes-Ansicht Daten in eine csv-Datei mit diesem Code:
...
Const tz = ";"
Dim strText As String
intFilenum = Freefile
Open strFilePath For Output As intFilenum
Set doc = view.GetFirstDocument()
Do While Not doc Is Nothing
...
strText = WertA & tz & WertB & tz & WertC
Print #intFilenum, strText
Set doc = view.GetNextDocument(doc)
Loop
Close #intFilenum
...
Die csv-Datei wird erfolgreich erstellt.
Wenn ich mir die exportierte Datei im txt-Editor anschaue, steht nach dem letzten Datensatz allderings ein Zeilenumbruch (siehe csv1.jpg).
Dieser Zeilenumbruch macht bei der Weiterverarbeitung der Datei (nicht Notes) Probleme.
Was muss ich im Code ändern, damit der letzte Zeilenumbruch nicht eingefügt wird? (siehe csv2.jpg)
Gruß
Stefan
Auszug aus der Hilfe zu Print: The Print statement adds a newline character to the end of exprList (to force a carriage return), unless exprList ends with a semicolon or a comma.
Also einfach "& tz" an die Zeile hängen, wenn es die letzte Zeile ist. Also so: Do While Not doc Is Nothing
Set docNext = view.GetNextDocument(doc)
strText = WertA & tz & WertB & tz & WertC
If docNext Is Nothing then
strText = strText & tz
End If
Print #intFilenum, strText
Set doc = docNext
Loop
Wenn das auch nicht geht (weil Dein Zielsystem mit dem zusätzlichen Trenzeichen nix anfangen kann), dann musst Du einen NotesStream statt der "klassischen" Print- Methode verwenden, und dort gibt es den WriteText- Befehl, dem man mitgeben kann, ob er ein EOL mitsendet oder nicht.
Set stream = ses.CreateStream
Call stream.Open( strFilePath )
Do While Not doc Is Nothing
Set docNext = view.GetNextDocument(doc)
strText = WertA & tz & WertB & tz & WertC
If docNext Is Nothing then
Call stream.WriteText( strText, EOL_NONE )
Else
Call stream.WriteText( strText, EOL_PLATFORM )
End If
Set doc = docNext
Wend
@Peter Klett
habe ich auch probiert.
Ergebnis: Alle Datensätze stehen in nur einer Zeile.
Edit: So geht's:
If docNext Is Nothing Then
Print #intFilenum, strText ;
Else
Print #intFilenum, strText
End If
Und die Kombination beider Lösungsvorschläge?
Do While Not doc Is Nothing
Set docNext = view.GetNextDocument(doc)
strText = WertA & tz & WertB & tz & WertC
If docNext Is Nothing then
Print #intFilenum, strText;
Else
Print #intFilenum, strText
End If
Set doc = docNext
Loop
EDIT: Bist schneller drauf gekommen :-)
Bye,
Markus