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

Problem beim Daten einlesen

 

keineahnungvonmatlab
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 12:27     Titel: Problem beim Daten einlesen
  Antworten mit Zitat      
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:

Code:
fid = fopen('Ausfederung1.dat');
Groessen = textscan(fid, '%9c %11c %s %s', 1, 'headerlines', 3);
Einheit  = textscan(fid, '%s %s %s', 1);
Daten    = textscan(fid, '%f %f %f');
fclose(fid);

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.

Könnt ihr mir helfen?
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.11.2014, 14:37     Titel:
  Antworten mit Zitat      
Wie sieht denn eine Zeile der Daten in der Datei aus?
Private Nachricht senden Benutzer-Profile anzeigen
 
keineahnungvonmatlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 15:54     Titel:
  Antworten mit Zitat      
Code:
-42.270.689,00   -27.253.973,00   0.024414063
 


In der Zwischenzeit sind mir noch weitere Sachen aufgefallen.
Sobald ich diesen Befehl ausführe:
Code:
Daten    = textscan(fid, '%s %s %s');


 


werden die Zahlen richtig übernommen. Nur leider kommt dann bei dieser Operation eine Fehlermeldung



Code:
x = -Daten(1);

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 Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.11.2014, 17:02     Titel:
  Antworten mit Zitat      
Nein, man kann nicht mit strings rechnen. Dazu benötigt es einen Zahlen Datentyp.

Durch den unterschiedlichen Aufbau wirst du dir wohl auch etwas selber schreiben müssen, um die string in die richtige Zahl zu konvertieren.

Code:

daten = {'-42.270.689,00','-27.253.973,00','0.024414063'};
daten = strrep(daten,{','},{''}); alle Komma entfernen
 


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

Code:
Index_Punkte = strfind(daten,'.')
ans =

    [1x2 double]    [1x2 double]    [2]
 


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)
        if size(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);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
keineahnungvonmatlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2014, 09:51     Titel:
  Antworten mit Zitat      
Hallo,

danke schon mal für die Hilfe, genau das, was du beschrieben hast will ich machen. Habe die Systematik auch soweit verstanden denke ich.

Ich bin mir nun nur nicht sicher wie ich bei

Code:
daten = strrep(MESSDATEN,{','},{''}); % alle Komma entfernen


auf meine in einer cell gespeicherten strings zugreifen kann.
Liegt es daran, dass in der cell nochmals drei weitere cells mit meinen Messdaten befinden?

Vielen Dank.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 19.11.2014, 12:02     Titel:
  Antworten mit Zitat      
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)
        if size(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);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
keineahnungvonmatlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2014, 13:52     Titel:
  Antworten mit Zitat      
Super, vielen Dank.
Momentan sie die Unklarheiten beseitigt Smile

Bestimmt bis bald. Laughing
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.