WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit dlmread - Nullen werden eingelesen

 

Lysop
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2010, 18:49     Titel: Probleme mit dlmread - Nullen werden eingelesen
  Antworten mit Zitat      
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.

mein Befehl dazu:
Code:

M=dlmread(Datei-Name, '\t', [38 1 4320037 1])
 

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!

Danke
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 10:40     Titel:
  Antworten mit Zitat      
Hallo,

kannst Du evtl. einen kleinen Teil der Datei anhängen, damit man sich das Problem genauer anschauen kann?

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 11:21     Titel:
  Antworten mit Zitat      
Morgen,

hab mal die ersten 100 Zeilen solch einer Datei hier angefügt:


bis Zeile 39 sind es nur Infos über die Messtechnik, etc.

und ich muss die 2. und 3. spalte jeweils auslesen!

beispiel_messung.txt
 Beschreibung:

Download
 Dateiname:  beispiel_messung.txt
 Dateigröße:  5.15 KB
 Heruntergeladen:  634 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 12:09     Titel:
  Antworten mit Zitat      
Hallo,

ich weiß zwar momentan noch nicht warum dlmread Probleme macht, aber mit textscan lässt sich die Datei importieren:

Code:

fid = fopen('beispiel_messung.txt');
data = textscan(fid,'%*f%f%f%*s','delimiter','\t','headerlines',38);
fclose(fid);
 


Mit dem * nach dem % kannst Du festlegen, dass die Spalte nicht importiert werden soll.

Viele Grüße,

LittleX

PS: dlmread hat Probleme mit dem Datum/Uhrzeit. Ich weiß, warum ich textscan lieber mag Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 12:25     Titel:
  Antworten mit Zitat      
hallo, schon mal danke für den Vorschlag.

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!
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 14:20     Titel:
  Antworten mit Zitat      
Hallo,

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.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 14:53     Titel:
  Antworten mit Zitat      
hmm ok, gibts ne komfortable möglichkeit aus 72 Dateien die Datums-Spalte jeweils zu löschen? Very Happy


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

 



als Ergebnis erhalte ich dann:

Code:

open file

str =

Messwerte1.ASC


M =

    [4320000x1 double]

%....usw.
 




wo ist da der denkfehler?

Tut mir leid, dass ich hier so rumfrage, aber bin absoluter Matlab-Neuling und muss mich da erstmal reinarbeiten!
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 15:01     Titel:
  Antworten mit Zitat      
Hallo,

textscan liefert das Ergebnis in einer Variablen vom Typ cell zurück.
Auf den Inhalt greifst Du so zu:
Code:

M = M{1};
save daten M
 

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.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 15:26     Titel:
  Antworten mit Zitat      
Super!! Vielen Dank

ok, jetzt noch die abschließende Frage:


Ich möchte jetz also 24 Dateien aus einem Ordner auslesen.
Das heißt er soll die jeweilige Spalte als eigene mat -Datei abspeichern.

Wie bekomme ich es jetzt hin, dass er die mat-Datei mit einer fortlaufenden Nummerierung abspeichert?

Code:

....
fid = fopen(str);
M = textscan(fid,'%*f %f %*f %*s','delimiter','\t','headerlines',38);
M=M{1};
filename=['gewünschter Dateiname' 'intstr(i)', '.mat']; % meine Idee
save filename  M;
fclose(fid);
 



aber dann legt er ja nur immer wieder die datei filename.mat neu an...
wie geht das richtig?
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 15:37     Titel:
  Antworten mit Zitat      
Code:

filename=['gewünschter Dateiname',intstr(i), '.mat'];
save(filename,M)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 16:03     Titel:
  Antworten mit Zitat      
Ja, genau in dem Moment wo die Antwort kam, hab ich es dann auch selber gecheckt.

Aber letzte Frage, dann ist hoffentlich alles im Lot:

Wie krieg ich bei dem save noch nen Verzeichnispfad rein? Möchte die Daten nicht im Standard-MatLab Ordner speichern, sondern woanders.

Oder bietet sich das nicht an?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.12.2010, 16:13     Titel:
  Antworten mit Zitat      
Hallo

du musst dem SAVE kompletten Pfad übergeben.
Code:

A=10;
save('C:\TEMP\MYDATA.mat','A')
 


oder auch als Interaktion:
Code:

A=10;
[filename, pathname] = uiputfile(...
 {'*.mat'},...
 'Save as');
mypath = fullfile(pathname, filename)
save(mypath,'A')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 16:40     Titel:
  Antworten mit Zitat      
VIELEN VIELEN DANK

Es funktioniert jetzt alles tadellos.

musste nur noch zusehen, wie ich einen festen Pfad und variablen Dateinamen zusammen bekomme. hab es jetzt so gelöst:

Code:
dateiname=['Dateiname_',int2str(i)','.mat'];
pfad = ['C:\.....'];
pfd = fullfile(pfad,dateiname);
save(pfd,'M')
 


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.

was sagt mir das?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.12.2010, 17:00     Titel:
  Antworten mit Zitat      
Zitat:
??? 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:
Code:

Dann stoppt das Programm, wenn der Fehler auftritt
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 17:08     Titel:
  Antworten mit Zitat      
jetzt läufts wie geschmiert, hab nichts verändert....naja

also nochmal vielen vielen Dank!!

Du warst mir eine große Hilfe Smile Jetzt geht die fröhliche Auswertung weiter.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.