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

Einlesen eines CVS-Files in eine Matlab function

 

kwd46056
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 27.10.17
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 27.10.2017, 11:14     Titel: Einlesen eines CVS-Files in eine Matlab function
  Antworten mit Zitat      
Hallo an alle,
ich schreibe zurzeit meine Abschlussarbeit und muss nun ein Matlab Skript samt Funktionen erstellen und diese anschließend plotten. Da ich überhaupt nicht fit in matlab bin, hoffe ich das mir hier geholfen wird.

Folgendes Problem: Ich habe ein cvs.file , dass wie folgt aufgebaut ist.
Es is für verschiedene Frequenzen, jeweils die Verschiebung und die dazugeörige Kraft angegeben. Hier ist jetzt nur,zwecks der Übersichtlichkeit, die ersten beiden Spalten abbgebildet. Als Trennzeichen wird ein Semicolon verwendet.

sz 0.05 Hz Fz 0.05 Hz sz 0.1 Hz Fz 0.1 Hz
[mm] [kN] [mm] [kN]
0.14255987 12.390.839
0.28052938 19.701.105
0.41446346 27.425.592
0.545156 34.415.002
0.6507116 40.825.682
0.75337374 46.363.358
0.83137405 51.031.756
0.89020759 5.443.965
0.93210781 5.637.167
0.94258273 5.700.614
0.94340473 55.825.028
0.9119938 53.510.814
0.86066473 49.582.806
0.79362935 44.401.212
0.70061088 38.259.079
0.60073131 30.990.093
0.4742592 23.247.061
0.34601724 1.514.293
0.20520999 0.65939713
0.05650764 -0.14735323
-0.084610954 -0.9177413
-0.23349081 -16.754.186
-0.36790571 -2.457.063
-0.49910715 -31.758.761
-0.62164032 -38.445.926
-0.72053993 -44.254.293
-0.81589574 -49.326.668
-0.88195115 -53.230.391
-0.93054074 -55.879.211
-0.95948213 -57.231.607
-0.95902205 -57.006.798
-0.94863731 -55.323.448
-0.90438706 -51.890.516
-0.84639448 -47.418.847
-0.76523072 -41.573.229
-0.66200966 -34.786.055
-0.55484504 -27.432.396
-0.42185476 -19.533.304
-0.28947628 -11.209.855
-0.14536141 -0.28043675
0.00387115 0.49715516
0.14312109 12.592.697
0.28854743 20.026.112

Nun möchte ich eine Matlab Funktion erstellen, das dieses csv.file einliest und später von einem Hauptprogramm aufgerufen wird.

Mein bisheriger Code lautet wie folgt:

Code:

function [ data ] = readMeasurement( file )
% Einlesen der Messungen (csv.file)
%   Detailed explanation goes here

    table = readtable('C:\Users\David\Desktop\Test Simulation\Messungen_Subvars\09 Messdaten\HALL\HALL_23.10332_Messung.csv');
    data  = struct('f', {}, 'x', {}, 'F', {} );                                                                                % definierte Strukturbereiche
   
    j = 0
    for i = 1:2:width(table)                                                            % for Schleife zum durchlaufen der Tabelle für alle Frequenzen
        j    = j+1
        name = table.properties.variable(i)                                
        frequenz = str2double(regexprep(name{'_',''},{'.' ''}));         % aufteilen der Frequenzspalten (jede Frequenz beinhalter den Weg x und die Kraft F)
        data(j)  = struct(...                                              
                   'f', frequenz, ...
                   'x', str2double(table{2:end},i+0)),...                         % Umwandlung in den numerischen Bereich
                   'F', str2double(table{2:end},i+1);                              % Umwandlung in den numerischen Bereich
    end
                   

end
 


Meine Frage nun. Ist das Skript für das einlesen der Datei richtig und wie müsste das Hauptprogramm ausschauen, die diese Funktion aufruft.

Ich hoffe ich konnte es genau genug erläutern.

Grüße kwd46056
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.11.2017, 20:35     Titel:
  Antworten mit Zitat      
Zitat:

Meine Frage nun. Ist das Skript für das einlesen der Datei richtig und wie müsste das Hauptprogramm ausschauen, die diese Funktion aufruft.


Das kann man schwer beurteilen, weil den Code ohne Beispieldaten nicht ausführen kann.
Also es sieht auf den ersten Blick okay aus, das einzige was du anpassen muss in readtable file zu übergeben.
Ach ja noch was, der Name table ist bereits für Matlab interne Funktionen vergeben, besser anders benennen sonst können unerwünschte Seiteneffekte entstehen
Und noch was bemerkt, brauchst nicht in der Schleife jedes mal struct erzeugen, hast ja vor der Schleife initialisiert:
Ich würde auch die Größe der struct vor der Schleife initialisieren, damit es schneller läuft
Code:

idx = 1:2:width(table);
data  = struct('f',num2cell(zeros(size(idx))), 'x', [], 'F', [] );
j = 0
for i = idx
  j    = j+1
  name = table.properties.variable(i)                                
  frequenz = str2double(regexprep(name{'_',''},{'.' ''}));
  data(j).f =  frequenz;
  data(j).x = str2double(table{2:end},i+0);
  data(j).F = str2double(table{2:end},i+1);
end                      
 




Und im Hauptprogramm rufst dann einfach die Funktion so auf, wie du diese deklariert hast, und das wäre alles, also versteh ich deine Frage nicht
Code:

% in Hauptprogramm dann so aufrufen:
data  = readMeasurement( 'C:\Users\David\Desktop\Test Simulation\Messungen_Subvars\09 Messdaten\HALL\HALL_23.10332_Messung.csv')
 
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 - 2024 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.