Verfasst am: 14.12.2010, 18:49
Titel: Probleme mit dlmread - Nullen werden eingelesen
Hallo,
habe folgendes Problem:
Ich habe eine Datei mit Messwerten von 2 verschiedenen Geräten mit jeweils über 4 Millionen Messwerten vorgegeben.
Also habe ich eine ASCII Datei mit 4 Spalten (Zeit, Messwert, Messwert, Uhrzeit+Datum) á 4,32 Millionen Werten.
Mit dlmread möchte ich jetzt nur die Werte einer Spalte einlesen und in einem Vektor M abspeichern.
die Range ist so gewählt, weil ich 38 Header zeilen habe.
wenn ich diesen Befehl ohne ';' ausführe, zeigt er mir ja die Werte im Command Window an, die in M gespeichert werden. das sieht dann z.B. wie folgt aus:
-0,125
0
-0,134
0
0,000
0
0,0123
0
0,000
0
-0,135
Also immer eine 0 zwischen den Werten.
Trotzdem wird mit angezeigt, das M genau 4320000x1 groß ist, was ja auch stimmen sollte.
Die Werte in der Ascii-Datei sind übrigens durch TAB getrennt.
Zudem habe ich mir den größten Wert anzeigen lassen. Beim Vektor M liegt er z.b. an der Stelle 2.000.000 suche ich diesen Wert aber in der Ascii-Datei mittels Text-Editor befindet er sich genau bei der Hälfte, also bei 1.000.000.
Blicke da jetzt nicht mehr genau durch, welche Werte MATLAB wirklich abspeichert und was nicht!
Liest er nur die Hälfte der Werte ein?
Hoffe, ihr versteht mein Problem und dass jemand mir helfen kann!
ABer kann ich mit textscan auch ne Ascii datei einlesen?
Und das Datum will ich ja eigentlich nicht einlesen, es geht mir ja nur um die 2. und 3. spalte.
oder meinst du, das hängt mit dem problem trotzdem zusammen.
Und noch eine Frage.
Ich würde die Daten gerne als Matlab-datei abspeichern. Welcher Befehlt würd sich da empfehlen?
Bei dlmwrite knallt er in verbindung mit dlmread ja auch wieder die ganzen nullen rein!
auch wenn Du das Datum nicht einlesen willst, kommt dlmread trotzdem "durcheinander". Kannst Du einfach testen: wenn Du die letzte Spalte mal entfernst, dann klappt auch dlmread.
textscan kann alle möglichen Textdateien einlesen (ASCII Datei ist ja auch nur eine Textdatei).
Was meinst Du mit Speichern als Matlab-Datei?
Variablen zum Wiederverwenden würde ich als MAT Datei speichern (Befehl save).
Zu speichern als txt entweder dlmwrite (Du kannst ja die Daten trotzdem mit textscan einlesen) oder formatierter Text mit fprintf.
hmm ok, gibts ne komfortable möglichkeit aus 72 Dateien die Datums-Spalte jeweils zu löschen?
ja, ich wollte die Werte dann als mat Datei abspeichern, weil ich so schneller an sie rankomme, anstatt die Ascii Dateien immer wieder auszulesen.
Aber nochmal eine Frage zu txtread...irgendwie klappt das noch nicht so richtig, weil er bei mir immer nur anzeigt dass meine Variable M eine 1x1 Cell wäre...
Code:
% g ist ne zählvariable und b nen string,,,hab für mein programm die vorlage hier aus dem forum genommen for i = 1:(g-1)
str = b(i,:);
disp 'open file'
str
fid = fopen(str);
M = textscan(fid,'%*f %f %*f %*s',4320000,'delimiter','\t','headerlines',38) % auch ohne die 43200000 möglich, aber selbes problem fclose(fid);
end
Damit liegen Deine Daten dann als Vektor vor und Du kannst sie mit save speichern (daten ist dabei der Name der mat-Datei).
Wenn Du solagen lesen willst, wie das Format passt, brauchst Du bei textscan nicht angeben, wieviele Zeilen Du lesen willst.
Also vielen vielen Dank, du hast mir sehr viel weiter geholfen.
EDIT: Ok, es ist noch nicht zu ende...habe jetzt das Programm durchlaufen lassen, 9 Dateien laufen auch ohne Probleme, dann bekomme ich bei der 10. folgende Meldung:
??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
was sagt mir das?
Das sagt dass Dimensionen von 2 Variablen, welche du zusammensetzen möchtest, sind unterschiedlich
z.B A hat Dimension 1x5, also Zeilenvektor
B hat Dimension 5x1 also Spaltenvektor
um die Variablen zusammenzusetzen zu einer 5x2 Matrix, muss man erreichen dass Dimensionen gleich sind. z.B A transponieren...
Schau dir am Besten die Zeile an, wo der Fehler passiert ist, setzte dort Breakpoint.
Weil ich habe keine Ahnung was den Fehler verursacht, dazu brauche ich eine lauffähigen Version mit Beispieldaten, um den Fehler zu reproduzieren
Du kannst vor dieser Zeile auch folgendes einfügen:
jetzt läufts wie geschmiert, hab nichts verändert....naja
also nochmal vielen vielen Dank!!
Du warst mir eine große Hilfe Jetzt geht die fröhliche Auswertung weiter.
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
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.