Autor Thema: csv-Export - Zeilenumbruch am Ende verhindern  (Gelesen 3450 mal)

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
csv-Export - Zeilenumbruch am Ende verhindern
« 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
« Letzte Änderung: 08.01.16 - 11:48:23 von cebolina »
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #1 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
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #2 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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #3 am: 08.01.16 - 10:44:59 »
Ein

Print #intFilenum, strText ;

schreibt keinen Zeilenumbruch
« Letzte Änderung: 08.01.16 - 10:47:20 von Peter Klett »

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #4 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
« Letzte Änderung: 08.01.16 - 11:09:45 von cebolina »
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #5 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
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #6 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:
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: csv-Export - Zeilenumbruch am Ende verhindern
« Antwort #7 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
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz