Verfasst am: 18.11.2014, 12:27
Titel: Problem beim Daten einlesen
Hallo,
nach langer Suche in diesem Forum bin ich leider zu keiner Lösung gekommen.
Ich habe eine große Menge an Messwerten in einer .dat Datei vor mir.
Die Datei hat 3 Kopfzeilen und zwei Überschriften. Diese "Probleme" konnte ich lösen. Beim einlesen der eigentlichen Daten (3 Spalten mit x Zeilen) passiert jedoch folgendes:
in die erste Spalte von Daten wird der erste Wert in der ersten Spalte der .dat Datei eingepflegt als zweiten Wert in der Daten-Spalte finde ich dann den ersten Wert der zweiten Spalte meiner Messergebnisse.
werden die Zahlen richtig übernommen. Nur leider kommt dann bei dieser Operation eine Fehlermeldung
Ist das normal? Kann ich nicht mit einem String rechnen?
Desweitern müsst ich irgendwie des Messwerte aufbereiten, da in der .dat teilweise tausender Trennzeichen (Punkte) verwendet werden. In Wirklichkeit muss aber dar erste Punkt bereits das Koma sein.
Vielen Dank schonmal und entschuldigt die Unwissenheit
Jetzt brauchst du noch eine Schleife, welche die Zahlen mit mehr als einen Punkt abändert, wobei der erste Punkt stehen bleiben muss...wenn ich dich richtig verstanden habe.
Damit bestimmst du die Anzahl der Punkte bzw. bekommst den Index der Punkte im string
Sind in einer Zelle von Index_Punkte mehr als eine Zahl, musst du löschen.
Code:
daten = {'-42.270.689,00','-27.253.973,00','0.024414063';'270.689,00','-99.253.973,00','0.014063'};
daten = strrep(daten,{','},{''}); % alle Komma entfernen
Index_Punkte = strfind(daten,'.'); % suche alle Punkte und speichere den Index for i=1:size(Index_Punkte,1) for m=1:size(Index_Punkte,2) ifsize(Index_Punkte{i,m},2) > 1 % Punkte nach dem 1. Punkt löschen
daten{i,m} = cell2mat([daten{i,m}(1:Index_Punkte{i,m}(1)), strrep(daten{i,m}(Index_Punkte{i,m}(1)+1:end),{'.'},{''})]);
end end end % string in Zahl umwandeln
daten = str2double(daten);
auf meine in einer cell gespeicherten strings zugreifen kann.
Liegt es daran, dass in der cell nochmals drei weitere cells mit meinen Messdaten befinden?
Vermutlich kann man das auch eleganter lösen...aber es ist immerhin eine Lösung. Ich hoffe der Aufbau von daten entspricht deinem Datensatz nach dem Einlesen.
Code:
daten = {{'-42.270.689,00';'-27.253.973,00'},{'0.024414063';'270.689,00'},{'-99.253.973,00';'0.014063'}};
% Spaltenweise Verarbeitung for i=1:size(daten,2)
data_col = daten{1,i}(:); % Spalte holen
data_col = strrep(data_col,{','},{''}); % alle Komma entfernen
Index_Punkte = strfind(data_col,'.'); % suche alle Punkte und speichere den Index for m=1:size(Index_Punkte,1) ifsize(Index_Punkte,1) > 1 % Punkte nach dem 1. Punkt löschen + string in Zahl umwandeln
data_col{m,1} = str2double(cell2mat([data_col{m,1}(1:Index_Punkte{m,1}(1)), strrep(data_col{m,1}(Index_Punkte{m,1}(1)+1:end),{'.'},{''})]));
end end
daten{1,i} = cell2mat(data_col); % cell-array in Vektor(m x 1) umwandeln end
% cell in Matrix umwandeln
daten = cell2mat(daten);
Super, vielen Dank.
Momentan sie die Unklarheiten beseitigt
Bestimmt bis bald.
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.