Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Tode am 14.01.16 - 10:21:50

Titel: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Tode 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?
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Peter Klett 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
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Andrew Harder 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.
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Tode 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...
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Schnubbel 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
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: koehlerbv 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
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: pram 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
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Schnubbel am 14.01.16 - 14:54:43
evtl. hilft dir dieser Uralt-Post :

http://atnotes.de/index.php/topic,12371.0.html
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: rambrand 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
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Peter Klett 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.
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: koehlerbv 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
Titel: Re: Neue Zeile in Textfile einfügen mit LotusScript
Beitrag von: Tode 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)