Verfasst am: 18.04.2013, 14:49
Titel: Einlesen von EMG-Daten einzelner Spalten aus csv-Datei
Hallo liebe matlab-Gemeinde,
ich bin absoluter Neuling auf dem Gebiet und werte gerade eine Studie mit Elektromyografischen Daten aus.
Die Daten liegen im csv-Format vor und ich muss mir diese jetzt aus dem Rohformat in eine geeignete Form bringen.
Die ersten 172 Zeilen sind Müll, den ich gern eliminieren würde.
Dann kommt eine Zeile header und dann beginnen die Daten.
Wenn diese Daten dann alle importiert wären, würde ich gern nur die Spalten mit dem header 'Latissimus_Dorsi_rechts_[5]: EMG' und 'Latissimus_Dorsi_links_[7]: EMG' auswählen.
So weit mein erstes Problem, was ich gern erst einmal mit eurer Hilfe in den Griff bekommen würde.
Schau dir TEXTSCAN an, hier kannst über Option 'HeaderLines', die Zeilen überspringen.
Schauen dir dazu die Beispiele in der Doku, und auch hier in Forum kannst dazu unzählige Threads zur Texte-Einlesen-Routinen finden.
Sonst muss du sagen, wo genau deine Schwierigkeiten liegen. Poste bitte dann auch so ein CSV-File hier.
Bis jetzt ist deine Frage viel zu allgemein formuliert und kann so nicht beantwortet werden
Via "Import Data" hab ich die Datei importiert.
In dem Importdialog kommt kann man oben rechts ja "Number of text header lines:" definieren. Dort habe ich jetzt die ersten 173 Zeilen eingetragen.
Nun bekomme ich Workspace drei Dateien angezeigt.
collheaders
data
textdata
In 173. Zeile ist dann aber meine jeweilige Kommagetrennte Spaltenbezeichnung, die ich in collheaders auch so angezeigt bekomme.
In textdata befinden sich dann nochmal die Zeilen 1 bis 173.
1. mit welchem Befehl bekomme ich Zeile 1 bis 172 eliminiert?
Für mich sind nur die Daten in Spalte 26 und 34 (plus die jeweilige Samplezeit) relevant. Diese Spalten würde ich gern von allen anderen Daten trennen.
2. mit welchem Befehl kann ich Spalte 26 und 27 sowie 34 und 35 als neue Matrix erzeugen?
% 172 Zeile überspringen
HEAD = textscan(fid, '%s', 0, 'delimiter',',', 'Headerlines', 172);
%% Header einlesen und nach Kommas auftrennen
HEAD = fgetl(fid);
HEAD = regexp(HEAD,',','split');
% Daten einlesen
DATA = textscan(fid, sprintf('%%%c ',ones(1,length(HEAD))*102),'delimiter',',','MultipleDelimsAsOne', 1);
fclose(fid)
Super! Vielen Dank! Das klappt schon mal. Genau so hatte ich mir das vorgestellt
Nur gibt es noch einen kleinen Fehler.
Dadurch, dass ich die csv eingekürzt habe, hat man das nicht gesehen.
Ab einer bestimmten Zeile sind in einigen Spalten keine Daten mehr vorhanden. Matlab verschiebt dabei alle verbleibenden mit Werten ausgefüllten Spalten nach vorn, sodass nach Spalte 12 dann im Rest nur noch "NaN" steht.
Das gleiche Problem existiert, wenn ich über den Dialog File->Import Data gehe und dort den Seperator auf Comma setze. Wähle ich aber als Seperator Other und trage manuell das "," ein, so bleiben die Spalten unverändert und werden nicht nach vorn gezogen.
% 172 Zeile überspringen
HEAD = textscan(fid, '%s', 0, 'delimiter',',', 'Headerlines', 172);
%% Header einlesen und nach Kommas auftrennen
HEAD = fgetl(fid);
HEAD = regexp(HEAD,',','split');
klasse! ich dank dir vielmals!
werde sicherlich das ein oder andere mal auf die hilfe hier im forum zurückgreifen müssen.
beste grüße
tino
Milka
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.07.2015, 11:13
Titel: Einlesen von Messdaten aus CSV-Datei
Hallo zusammen,
ich bin ein Anfänger in Matlab und habe nach mehreren Suchen dieses Forum gefunden.
Das Beispiel von denny hat mir gut geholfen. Mir sind trotzdem noch einige Sachen unklar wie z.B
Es funktioniert sehr gut aber ich würde gern etwas anderes haben und zwar:
- was kann ich tun, damit die erste Zeile eingelesen wird und die zweite nicht?
- Meine nötigen Messdaten fangen ab der Zeile 12 an und gehen bis zur Zeile 169. Wie könnte ich nur den Bereich auswählen?
Hallo Milka
bitte hänge keine neuen fragen an alte posts an. der beantwortet status wird sonst sinnfrei. eröffne bitte eine neue frage.
falls du auf ein anderes thema verweisen willst kannst du einen link dazu einfügen.
Zitat:
Jedes Mal, wo ich sie lösche, bekomme ich eine Fehlermeldung.
wenn fehlermeldungen auftreten solltest du sie auch posten. das sind keine zufällig generierten texte sondern enthalten wertvolle informationen die man nicht erraten kann.
Zitat:
Was sollten %%%c und *102 sein und was tun sie genau?
das steht doch in der doc. und *102 bedeutet mal 102..... das ist multiplikation.
grüße
_________________
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.