Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich wollte mir meine schönen Simulationsdaten (text-Datei) einlesen und ein wenig weiterverarbeiten. Leider sagt mir LabVIEW aber: "Zu wenig Speicher" (Auch wenn ich sie nur einlese und ein Anzeigefenster für den String mache, sprich: die weiteren Rechenoperationen sind vorerst nicht schuld). Das hört sich ja erst mal aussagekräftig an, aber ich glaub das nicht ganz, da die Datei nur 250MB groß ist!
Hat jemand eine Idee was schief läuft ?
Schönen Gruß!
LabView 8.2
Intel Core 2 Duo CPU @ 2,33GHz
3GB RAM
XP
Außerdem, wie genau sieht dein Datenlesen aus? Wirklich nur Read from Text File, oder vielleicht gleich eine Wandlung in irgendwelche DBL-Zahlen? Wenn nur txt-String, dann auf jeden Fall keine lokalen Variablen diesen Controls anlegen, denn das bedeutet immer Datenkopien im Speicher.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Wenn Du in der Date nur etwas Bestimmtes suchts, dann empfiehlt sich die Option (rechte Maustaste) "Zeilenweise lesen".
Als z.B immer nur 1 Zeile lesen und sehen ob man darin fündig wird.
Mit dieser Option Damit könntest Du auch z.B nur immer 1000 Zeilen blockweise einlesen und das dann einzeln verarbeiten.
Sage erst mal, wie die Daten aussehen und was mit "Ein wenig weiterverarbeiten" präzise gemeint ist. Dann wird sich eine Lösung finden.
Also die Daten sind in dem Format "1.78996e-06", durch "Leerzeichen" getrennt. Am Ende der letzten Spalte ist immer ein "Enter". Das File hat dann zB. 8 Spalten und mehrere Millionen Zeilen.
Ich versuche es mit der angehängten Methode einzulesen, was genau so fehlschlägt wie mit "Aus Textdatei lesen".
LabView 8.2
Intel Core 2 Duo CPU @ 2,33GHz
3GB RAM
XP
An welcher Stelle sagt LabVIEW das denn? Evtl. kannst du erstmal alle Zeilen in ein Array schreiben (ohne die einzelnen Zeilen schon direkt in DoubleWerte zu zerlegen). Anschließend hantierst du dann nur noch mit dem String Array?
LG
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Auweia, erst den gesamten String eingelesen, und dann hunderte von String-Operationen (String teilen, dabei wahrscheinlich öfters umkopieren...), und parallel brauchst du dann auch den Speicher für dein 2D-Array, Speicherbedarf s.u.
Ich gehe mal davon aus, dass deine Zeilen im File immer nur Zahlenstrings, getrennt durch einen Spaltentrenner (also quasi eine csv-Datei), sind.
Dann probiere es mal so:
Speicherbedarf: #Spalten * #Zeilen * 8 bytes. Für den String quasi nichts, da jetzt zeilenweise eingelesen wird.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Jede Art von Datenverarbeitung endet entweder in einr Information auf dem Bildschirm, oder aber in einer anderen (großen) Datei. In keinem der beiden Fälle wird also im Endergebnis nennenswertes Memory benötigt. Bei der Verarbeitung ein riesengroßen Datei kommte es darauf an, daß Blockweise gearbeitet wird und eventuell anfallende große Zwischenergebnisse als temporäre Dateien gespeichert werden.
Deshalb kann ich mich nur wiederholen: Wenn sich differdt durchringen könnte, zu verraten, was er mit der Riesendatei vorhat, wäre das Problem hier schon schon so gut wie gelöst und es mußte nicht ins Blaue hinein nach Lösungen geraten werden.
Ein erster Schritt könnte z.B. darin bestehen, daß die ASCI-Daten erst mal ins Binärformat konvertiert werden, bevor dann weiter darauf zugegriffen wird. Bei dieser Gelegenheit wäre auch zu überlegen, ob nicht das Zahlenformat sgl statt dbl ausrechend ist. Wenn es sich bei den Daten um 16 bitige Messwerte handelt, wäre diese Frage schon mal zu bejahen.
06.10.2009, 08:57 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2009 09:18 von Lucki.)
Mir fällt da noch was ein: Wenn eine Simulationsdatei so riesengroß ist, dann liegt das wahrscheinlich daran, daß die Schrittweite dt sehr klein gewählt wurde. Das mag notwendig gewesen sein, damit die Simulation konvergiert, ist aber vielleicht nicht notwendei zur Darstellung und Auswertung der Daten. Neuabtastung der Daten mit dem entsprechenden VI würde die Datenmenge schon mal drastisch reduzieren.
Edit: @differdt: Poste doch einfach mal das erste MB der Datei (gezippt). Dann läßt sich leicht sehen, ob man die Datenmenge bei zu hoher Punktdichte reduzieren kann.
Okay, ich wollte niemanden mit Einzelheiten langweilen, aber ihr habt es ja so gewollt
Also das File enthält für jeden Punkt auf einer Ebene (zB.: 100*100 Punkte) eine komplexe elektrische und magnetische Feldamplitude (je drei Komponenten x y z sprich 6 komplexe Feldkomponenten). Da ich einen kurzen Laserpuls simuliere nutze ich das Prinzip der Superposition und habe dann für zB 128 verschiedene Wellenlängen die Feldkomponenten an allen Raumpunkten, sprich 128*100*100 Zeilen und 6*2+2 Spalten (6 komplexe zahlen * 2 = 12 reelle Zahlen + 2 Raumkoordinaten).
Das Ziel ist es jetzt an jedem Raumpunkt die Feldamplituden für die verschiedenen Wellenlängen zu addieren. Das ergibt dann wieder eine handhabbare größe. Es scheitert aber schon beim öffnen des Files.
Die Stützstellenzahl würd ich ungern noch weiter verringern, weswegen die Datnmenge nicht durch interpolation reduziert werden sollte.
Schönen gruß und vielen Dank für die bisherigen Ideen!
LabView 8.2
Intel Core 2 Duo CPU @ 2,33GHz
3GB RAM
XP