Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: cebolina am 08.01.16 - 09:28:58

Titel: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: cebolina am 08.01.16 - 09:28:58
Hallo,

ich exportiere periodisch aus einer Notes-Ansicht Daten in eine csv-Datei mit diesem Code:

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
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: Tode am 08.01.16 - 09:57:10
Auszug aus der Hilfe zu Print:
Zitat
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:
Code
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.

Code
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
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: cebolina am 08.01.16 - 10:44:31
Hallo Torsten,

habe das Script mit deinem 1. Vorschlag geändert.
Es gibt jetzt zwar immer noch einen Zeilenumbruch am Ende der csv-Datei, aber das Zielsystem zickt nicht mehr rum.

Danke und Gruß
Stefan
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: Peter Klett am 08.01.16 - 10:44:59
Ein

Print #intFilenum, strText ;

schreibt keinen Zeilenumbruch
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: cebolina am 08.01.16 - 11:02:53
@Peter Klett

habe ich auch probiert.
Ergebnis: Alle Datensätze stehen in nur einer Zeile.

Edit: So geht's:
Code
If docNext Is Nothing Then
	Print #intFilenum, strText ;
Else
	Print #intFilenum, strText
End If
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: rambrand am 08.01.16 - 11:11:38
Und die Kombination beider Lösungsvorschläge?

Code
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
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: cebolina am 08.01.16 - 11:40:05
So liebe ich das:

Einer hat ein Problem,
zwei haben sich gegenseitig ergänzende Lösungsansätze,
einer hat mitgedacht,
Problem gelöst!

Danke  :love:
Titel: Re: csv-Export - Zeilenumbruch am Ende verhindern
Beitrag von: Tode am 08.01.16 - 14:15:20
@Peter: Siehste mal, da habe ich die Hilfe falsch verstanden... Man muss den Strichpunkt nicht an den String anhängen, sondern an den Print... Argh