|
|
Probleme bei Datastore beim Einlesen von .dat |
|
Phipsi |

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 11.08.16
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: 2015b
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 14:07
Titel: Probleme bei Datastore beim Einlesen von .dat
|
 |
|
 |
|
Hallo zusammen,
wie im Titel erwähnt habe ich ein Problem mit dem Einlesen von einer großen Textdatei. (8589437 Zeilen und 12 Spalten, ca 1 GB groß).
Readtable oder textscan funktionieren bei dieser Größe nicht.
Also habe ich datastore und read benutzt, um das ganze Blockweise einzulesen.
Das ganze funktioniert auch gut, außer dass bei jedem siebten Block die readsize ignoriert wird und einfach irgendeine Anzahl von Zeilen eingelesen wird.
Hier ist mal das Programm bisher:
Die Kontrolvariablen am Ende der Schleife:
rows stimmt, es werden alle Zeilen eingelesen
count= 222, sind zu viele sollten eigentlich 199 sein.
Bei s sieht man, dass nur bei jedem siebten Block zu wenige Zeilen eingelesen werden. Aber auch da nicht immer gleich viele (schwankt so zwischen 10000 und 20000).
Weiß jemand, wie ich dafür sorgen kann, dass immer die gleiche Anzahl Zeilen gelesen werden?
Mein Arbeitsspeicher ist nicht ausgelastet. Da kann es also eigentlich nicht dran liegen.
Viele Grüße
Philipp
Edit: Nachdem ich mal einen durchlauf getimed habe, ist mir aufgefallen, dass die Funktion "TextFileSplitReader" 32 mal aufgerufen wird. Was auch die Anzahl der Blöcke mit weniger Zeilen ist (inkl. dem letztem, der nur noch auffüllt). Denke mal, da gibt es einen Zusammenhang.
Zuletzt bearbeitet von Phipsi am 11.08.2016, 14:35, insgesamt einmal bearbeitet
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 14:35
Titel:
|
 |
Hallo,
aus der Doku:
Zitat: |
If ReadSize is a positive integer, then each call to read reads at most ReadSize rows. |
Das Verhalten ist also auf jeden Fall wie dokumentiert.
Warum hier weniger Zeilen als die Maximalzahl eingelesen werden, kann ich ohne die Datei auch nicht sagen. Gibt es denn irgendwelche Besonderheiten bei den Zeilen, an denen vorzeitig zum nächsten Block gesprungen wird?
Grüße,
Harald
|
|
|
Phipsi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 11.08.16
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: 2015b
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 14:55
Titel:
|
 |
Schonmal danke für den Hinweis. Wo hast du das denn gefunden? In der Matlab-Hilfe zu Datastore bzw Read habe ich nämlich nichts gefunden (http://de.mathworks.com/help/matlab/ref/datastore.html).
Ich habe mir die entsprechenden Zeilen in der Datei mal angeschaut, kann aber nichts ungewöhnliches daran sehen.
Es sind wie immer das Datum und Uhrzeit (als ein String gespeichert), eine Spalte für fortlaufende Zählung und dann noch 10 Datenspalten (alle mit floats).
Keine fehlenden oder besonders große Werte in den Zeilen, die den Abbruch auslösen.
Edit:
Ich habe jetzt mal die ReadSize verändert und bei alter und neuer Size jeweils die Zeilen rausgeschrieben, wo es Probleme gibt und das sind in der Tat dieselbe. Also scheint es doch an der Datein zu liegen bzw. an diesen Zeilen.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 20:10
Titel:
|
 |
Hallo,
hier:
http://de.mathworks.com/help/matlab.....datastore-properties.html
Zitat: |
Ich habe jetzt mal die ReadSize verändert und bei alter und neuer Size jeweils die Zeilen rausgeschrieben, wo es Probleme gibt und das sind in der Tat dieselbe. Also scheint es doch an der Datein zu liegen bzw. an diesen Zeilen. |
Kannst du dann mal einen kleinen Datensatz daraus zusammenbauen, anhanddessen man das Verhalten reproduzieren kann?
Grüße,
Harald
|
|
|
Phipsi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 11.08.16
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: 2015b
|
 |
|
|
 |
|
Verfasst am: 02.09.2016, 10:48
Titel:
|
 |
Hallo,
ich weiß zwar bis heute nicht warum teilweise weniger eingelesen wird aber ich habe das ganze mit einer if-Abfrage umgangen.
Das ist zwar wahrscheinlich nicht die eleganteste Lösung aber funktioniert jetzt wie es soll.
Nochmal vielen Dank für deine Hilfe.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|