Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: platzebo am 29.11.11 - 16:11:29
-
Hallo, ich habe eine Textdatei mit 2,7GB.
Ein Datensatz (Zeile) darin ist in etwa 1kb groß.
Nun starte ich einen Agent, der diese Datei Zeile für Zeile ausliest.
Das klappt auch bis zur Zeile 2.1xx.xxx.
Ab dann wird jede Zeile falsch gelesen - sprich - ich bekomme nicht die ganze Zeile geliefert sondern nur einen Teil. Es kommt an dieser Stelle kein 0D 0A vor. Gibt es da eine 2GB Grenze? Hatte dieses Problem schon jemand? Wie kann man das lösen? Vielen Dank
-
Mit welcher Methode liest du denn aus? Sequenzielles Input oder via Read/ReadText im NotesStream? Bei letzterem taucht so etwas wie eine 2GB-Grenze durchaus in der Hilfe auf...
-
Das "wie" waere hier relevant. Wenn Du alles auf einmal liest, ist bei 2 GB endgueltig Schluss.
-
ich denke, dass die meisten Fileoperationen in Notes ein 2GB (bzw 4GB) Problem haben, da hier fast immer ein LONG als FilePos/FileSize etc verwendet werden.
Gruß
Roland
-
Wir können / müssen jetzt abwarten, was der Namenlose (den Nick muss man wohl lesen als "ich werde gefallen / gemocht werden") zu seinem Verfahren genaueres schreibt. Ich tendiere auch dazu, dass die Grenzen aus den genannten Gründen erreicht werden.
Viel interessanter wäre es aber doch - wenn man zu einer wirklichen Lösung kommen will - wenn wir erfahren würden, was der Fragesteller eigentlich erreichen will. Was man deuten kann: Aus System x kommen Daten, mit denen Notes / Domino etwas anfangen soll. Und erst bei dieser Fragestellung beginnt es, wirklich interessant zu werden. Alles andere ist "klein klein", technisches Zeugs (was erst später bei der Suche nach Lösungen eine Rolle spielen darf) etc.
Also: "platzebo", sag an, was Du eigentlich willst. Dann lohnt es sich, Gedanken zu machen.
Bernhard
-
Warum zerteilst du das File vorher nicht mit einer anderen Programmiersprache in 2 Teile?
http://stackoverflow.com/questions/546508/how-can-i-split-a-file-in-python
Oder mit einem Tool.
http://www.soft-ware.net/dateimanagement/datei-splitter/index.asp
-
Guten Morgen und vielen Dank für die zahlreichen Rückmeldungen :)
ich bekomme von einem Host die Daten geliefert und muß die auf x Datenbanken verteilen.
Wir lesen die Datei wie folgt aus:
Open "E:\Daten\adressg.txt" For Input Access Read As #fh
Line Input #fh, satz
Auf dem Server habe ich auch keine Möglichkeit einen Filesplitter zu installieren - an diese Möglichkeit dachte ich auch schon.
Ligrü aus Linz
Mike ;)
-
Hallo Mike,
mit Java in LotusNotes hast Du diese Probleme nicht. Vielleicht kannst Du diesen Agenten in Java umschreiben.
-
Moin,
wenn die Datensatzlänge bekannt und fix ist hilft dir vielleicht die Funktion/das Statement "Seek" weiter.
Damit kannst du dir die letzte "Dateiposition", die du ausgelesen hast speichern um zu einem späteren Zeitpunkt mit dem Auslesen ab dieser Stelle zu beginnen. Also kannst du so den auszulesenden Teil auf eine Größe von XY reduzieren pro Lauf.
Hier hatte ich damals Seek "entdeckt":
http://atnotes.de/index.php/topic,35763.0.html (http://atnotes.de/index.php/topic,35763.0.html)
Gruß
Demian
-
Danke für den Tip - leider ist die Satzlänge nicht konstant
-
Wobei das mit der Satzlänge bei Line Input eigentlich auch keine Rolle spielt, wenn du dir danach die Dateiposition wegspeicherst.
Du hast ja dann immer den ganzen Satz eingelesen und kannst dir danach die "Position" speichern und beim nächsten Mal da anfangen.
-
Probier mal aus das Ganze statt mit File mit der NotesStream Klasse zu lösen.
-
Hy Thomas,
vielen Danke - das war die Lösung *freu*
und ganz nebenbei ist es auch noch schneller :)
Testbasis = 1,8 GBDatei
Line Input -> 3:24
Stream -> 2:01
Schönen Tag noch
ligrü mike
-
Achtung, ganz ist es noch nicht gelöst:
Hallo, ich habe eine Textdatei mit 2,7GB....
...Testbasis = 1,8 GBDatei
und bei NotesStream.readText steht in der Hilfe definitv was von einem 2GB Limit:
Defaults to the entire stream to a maximum of 2GB.
(wobei hier nicht klar hervorgeht, ob der Stream max 2GB haben darf oder ein einzelner Lesevorgang nicht mehr als 2GB lesen kann)
-
Guten Morgen,
doch - es ist gelöst - zumindest für mich ;)
Die 2GB Grenze gibt es nur, wenn man nicht zeilenweise liest. Beim zeilenweisen Lesen war das Lesen der 2,7GB Datei bis zur letzten Zeile kein Problem. Ich habe den Test auf der 2,7GB Datei durchgeführt. Da ab 2GB jedoch die besagten Probleme auftreten habe ich beim Performancetest nicht bis zum Ende der Datei gelesen um ein aussagekräftiges Ergebnis zu bekommen.
Ligrü Mike
Nachtrag:
Die Trennzeichen chr(10) und chr(13) müssen nach dem Einlesen extra weggschnippelt werden