Autor Thema: Neue Zeile in Textfile einfügen mit LotusScript  (Gelesen 3940 mal)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Neue Zeile in Textfile einfügen mit LotusScript
« am: 14.01.16 - 10:21:50 »
Irgendwie habe ich gerade ein Brett vor dem Kopf.
Folgendes Szenario: ich exportiere 150.000 Dokumente in ein CSV- File. Da ich erst während des Exports erfahre, welche Felder in den Dokumenten vorhanden sind, kann ich die "Header"- Zeile mit den Feldnamen erst als allerletztes schreiben.

Aktuell habe ich es so, dass ich alle Werte in einer Liste sammle, und dann am Ende erst schreibe.
Das hat aber den Nachteil, dass ich keinerlei Fortschritt im file sehe, bis die gesamte Liste erstellt habe.

Nun wollte ich das umstellen, dass jede Zeile sofort geschrieben wird, aber ich bin irgendwie blind und finde keine (einfache) Möglichkeit, ganz am Ende den Cursor in die erste Zeile des Files zu setzen, und den Titel hinzuzufügen...

Natürlich kann ich einfach ein neues File erzeugen, und Zeile für Zeile rüberkopieren, aber das kann doch irgendwie nicht Sinn der Sache sein...
Kann mir jemand über den blinden Fleck weghelfen?
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 Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #1 am: 14.01.16 - 12:05:19 »
Wenn Du nur den Fortschritt sehen willst, Printe jedes 1000. oder 10.000. Dokument einen Status, das stört das System nicht (im Gegensatz zu 150.000 Prints).

Ansonsten könntest Du (zumindest unter Windows) zwei Datei schreiben, eine mit dem Titel, die zweite mit den Daten und dann auf BS-Ebene mit type daten.csv > header.csv (sinngemäß so, die genaue Syntax müsste ich in meinem historischen DOS 5.0 Buch nachsehen ;) ). Da gibt es auch eine Option, dass die Daten angehängt werden

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #2 am: 14.01.16 - 13:14:04 »
Vielleicht hilft Dir 'Seek' weiter:
https://www-01.ibm.com/support/knowledgecenter/SSVRGU_9.0.1/com.ibm.designer.domino.main.doc/LSAZ_SEEK_STATEMENT.html?lang=de

Mit: Seek #intFileNum, 1
Wird der Zeiger wieder auf die erste Position gesetzt und anschließend ab da fleißig überschrieben.

[EDIT]
Du musst als erste Zeile dann einen Platzhalter für die Headerzeile schreiben. Da Du die Länge vorher nicht kennst, kann das etwas tricky sein.
« Letzte Änderung: 14.01.16 - 13:21:34 von Andrew Harder »
Andy

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #3 am: 14.01.16 - 13:33:36 »
@Peter: Das mit dem Fortschritt printen habe ich schon... Der Export dauert aber -je nach Typ der Dokumente- sehr lange... Und wenn man dann in einem anderen Programm was schaut, dann baut Windows das "blockierte" Fenster nicht mehr auf -> Keine Statuszeile mehr sichtbar

Das mit dem concat auf OS- Ebene habe ich mir auch schon überlegt, vermutlich würde ich da am besten zurecht kommen.

@Andrew: Genau den Weg habe ich gerade probiert (hatte nach verfassen des Posts auch nochmal die Hilfe durchstöbert). Das Problem ist -wie Du schreibst- Dass ich VORHER wissen muss, wie lange die Zeile wird, denn Put schreibt nur, wenn die korrekte Länge vorher bekannt ist, und Write schreibt zwar an die richtige Stelle, überschreibt aber so viele Bytes wie es braucht, und wenn der Bytecount über mehrere Zeilen geht, dann fehlen halt Teile des Inhalts...
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 Schnubbel

  • Junior Mitglied
  • **
  • Beiträge: 90
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #4 am: 14.01.16 - 14:27:39 »
Hi,

wie wäre es mit einem Excel-Export?  Anschließend  speicherst du die Tabelle aus Excel in einer CSV ab.

Bei Excel hättest du ja den Vorteil, dass du beim Export einfach die erste Zeile frei lässt und dann am Ende füllst.

Lieben Gruß

Thorsten
Client -> Notesclient 8.5.3
Betriebssystem ->Windows 7
User-> Thorsten :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #5 am: 14.01.16 - 14:40:01 »
Selbst, wenn das eigentliche Zielsystem auch Excel lesen könnte: Die Exportzeiten steigen durch Excel gegenüber CSV dramatisch an. Torsten spricht ja von einer sechstelligen Anzahl von "Records".

Bernhard

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #6 am: 14.01.16 - 14:46:52 »
Es geht nicht ohne umkopieren oder zwischenspeichern im RAM, da du, wenn du am Anfang einer Datei was einfügen willst, die nachfolgenden Bytes nach hinten verschieben musst. (ausser du reservierst den Platz, was wiederrum nicht so einfach geht, da du die Länge nicht kennst.)

Falls die Liste ein Performance-Problem hat, kannst du die CSV-Daten ggf. in einem RT-Feld zwischenspeichern. Da gibts auch einen Navigator, mit dem man Zeilen oben einfügen kann (wobei im RT-Feld max. 65k Zeilen Platz haben)

Gruß
Roland
« Letzte Änderung: 14.01.16 - 16:24:16 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Schnubbel

  • Junior Mitglied
  • **
  • Beiträge: 90
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #7 am: 14.01.16 - 14:54:43 »
evtl. hilft dir dieser Uralt-Post :

http://atnotes.de/index.php/topic,12371.0.html
Client -> Notesclient 8.5.3
Betriebssystem ->Windows 7
User-> Thorsten :)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #8 am: 14.01.16 - 15:18:37 »
Falls es Notesdatabase.getfields noch gibt, zumindest ist es nicht in der Designerhilfe zu finden, würde das dann doch über das Ziel hinaus schießen, da er ja nur (bestimmte?) Dokumente exportieren will.

Ich verstehe die Aussage "Da ich erst während des Exports erfahre, welche Felder in den Dokumenten vorhanden sind" nicht ganz.
Mir schwebte da die Idee im Kopf herum beim Zugriff auf das erste Dokument die Items abzuklappern und dann mittels NotesItem.name die Feldnamen zusammenzustellen. Aber vielleicht denke ich da zu kurz, da ich wie gesagt nicht ganz verstanden habe, was mit der Aussage gemeint war.

Bye
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #9 am: 14.01.16 - 15:27:49 »
Und wenn Du es kombinierst? Du speicherst jeden Datensatz in einer Datei UND in der Liste. Dann schreibst Du eine neue Datei mit dem Titel und den Daten und löschst die erste Datei. Das Schreiben der Datei wird vermutlich nicht der Zeitfresser sein, sondern das Zusammensuchen der Daten.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #10 am: 14.01.16 - 15:34:03 »
Felder ist natürlich nicht richtig (die bekommt man ja über NotesForm.Fields heraus, und mehr kann es nicht geben), sondern es muss um die Items gehen. Und was da in den Documents drin steckt, kann man vorher nicht (sicher) wissen. Selbst Stichproben machen die Sache im Vorfeld nicht wasserdicht.
Wenn dann noch dazu kommt, das evtl. nur exportiert werden soll, wenn bestimmte Bedingungen erfüllt sind ... Torstens Ansinnen ist daher aus meiner Sicht völlig nachvollziehbar.

Bernhard

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Neue Zeile in Textfile einfügen mit LotusScript
« Antwort #11 am: 14.01.16 - 17:03:29 »
Danke Bernhard für die "Richtigstellung", die natürlich genau ins schwarze trifft.

@peter: Ja, das hatte ich auch schon überlegt. Aktuell habe ich es so gelöst, dass einfach die Titel ans Ende geschrieben werden mit einem entsprechenden Hinweis...

Damit konnte ich den Fehler in den Daten finden und beheben.

Darum ging es eigentlich: Der Export hat geloopt und ich konnte nicht rausfinden wo, ohne die Dokumente rauszuschreiben identifizieren und beheben (Ursache für den loop war eine MIME- Konvertierung, die nicht fertig wurde, weil ein Virenverseuchtes Word- Dokument drin war, das der Virenscanner weggeschmissen hat, als der Client das Ganze im tmp- Verzeichnis gespeichert hat)
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