|
Alex_der_Gast |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.01.2018, 16:49
Titel: Separieren von Messdaten
|
|
|
|
|
Hallo,
ich möchte meine Messdaten gerne separieren, habe aber einen Knoten im Hirn und komme irgendwie nicht weiter.
Meine Messdaten habe ungefähr folgendes Format:
x 1 x x
x 1 x x
x 1 x x
x 2 x x
x 2 x x
x 2 x x
x 3 x x
x 3 x x
x 4 x x
x 4 x x
x 4 x x
x 5 x x
x 5 x x
x 5 x x
Ich möchte jetzt einzelne Blöcke raustrennen, um diese später weiter Auswerten zu können. Derzeitiger Code dazu sieht folgendermaßen aus:
%% Separate Tests
[r,c]=size(data);
counter=0;
ii=1
for i=1:r
while data(i,2) < 2 && data(i,5) > 0 ;
counter=counter+1;
data_cell(counter)={data(ii:i,};
ii=i+1;
end
while data(i,2) < 6 && data(i,5) > 3 ;
counter=counter+1;
data_cell(counter)={data(ii:i,};
ii=i+1;
end
end
Den ersten Block schaffe ich wunderbar mit einer if-Schleife, ich weiß also das es vom Prinzip funktioniert. Ich ende aber bei allen Bedingungen (if, while) darin, dass mir das Programm die einzelnen Zeilen separiert und nicht den ganzen Block.
Gibt es einen Tipp was ich falsch mache?
Grüße und schonmal vielen Dank
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 02.01.2018, 23:35
Titel:
|
|
Hallo,
der Code wirft keine Fehler und liefert aber nicht die gewünschten Ergebnisse, oder? Dann ist die Frage, was die gewünschten Ergebnisse sind.
Am besten wäre ein konkretes Beispiel von data und die dafür gewünschten Ergebnisse.
Grüße,
Harald
|
|
|
Alex_der_Gast |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.01.2018, 08:47
Titel:
|
|
Hallo Harald,
das Problem das ich habe ist, das ich nach den Werten (sind die Testnummern) in Spalte zwei filtere, dabei gehören aber manchmal zwei Zahlen zu einem Test.
Das Problem ist, dass ich mit
if data(i,2) == 2;
counter=counter+1;
data_cell(counter)={data(ii:i,Smile};
ii=i+1;
end
Alle Werte von Test 1 in einem data_cell Paket habe, aber für alles was danach kommt trifft die Bedingung if data(i,2) == 2 zu und er macht somit für jede Zeile von Test zwei ein neues data_cell Paket mit jeweils einem Wert drin. Mir fehlt irgendwie ein Befehl der sagt, schreibe die gewünschten Werte (z.B. Test 2 und 3) in ein data_cell Paket. bei der while Schleife macht er das selbe wie bei der if Schleife, da ja auch dort die Bedingungen zutreffen.
Mit if Schleife bekomme ich es noch hin, dass er alle Tests die nach den gewünschten kommen abschneidet, aber eben nicht die die vor dem gewünschten Test sind.
Hoffe damit ist mein Problem etwas klarer geworden.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 03.01.2018, 10:37
Titel:
|
|
Hallo,
mir ist immer noch nicht klar, was du eigentlich erreichen möchtest.
Wie gesagt:
Zitat: |
Am besten wäre ein konkretes Beispiel von data und die dafür gewünschten Ergebnisse. |
Grüße,
Harald
|
|
|
Alex_der_Gast |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.01.2018, 11:45
Titel:
|
|
|
|
|
Dann angehängt die Testdatei (test.xls) und die Ausgabedate (t1.xls). Bei der Ausgabe ist das erste Blatt wie gewünscht, und alle weiteren sollten eigentlich in das zweite zusammengefasst sein.
Und hier noch der volle Code den ich verwende:
%% Data import
clear
clc
data=xlsread('test.xls');
%% Separate Tests
[r,c]=size(data);
counter=0;
ii=1
for i=1:r
if data(i,5)==4;
counter=counter+1;
data_cell(counter)={data(ii:i,};
ii=i+1;
end
if data(i,5)==6;
counter=counter+1;
data_cell(counter)={data(ii:i,};
ii=i+1;
end
end
%% Mean Value
[r,c]=size(data_cell);
for i=1:c
r1=size(data_cell{1,i},1);
Mean_Value(i,1)=mean(data_cell{1,i}(:,6));
Mean_Value(i,2)=mean(data_cell{1,i}(:,7));
%end
%% Write Excelfile
prompt = {'Enter the name of the new excelfile:'};
dlg_title = 'Input';
num_lines = 1;
answer2 = inputdlg(prompt,dlg_title,num_lines);
for i=1:c
filename = answer2{1,1};
sheet = i;
xlRange = 'C3';
A=data_cell{1,i};
xlswrite(filename,A,sheet,xlRange)
r1=size(data_cell{1,1},1);
B={'','Mean Value', '';'Voltage',round( Mean_Value(i,1),2)*1000,'mV'; 'Current', round( Mean_Value(i,2),2)*1000,'mA'};
xlRange = 'M2';
xlswrite(filename,B,sheet,xlRange)
e = actxserver('excel.application'); % # open Activex server
e.Workbooks.Add;
D={'Time','Time pro step','','','','Voltage','Current'};
xlRange = 'C2';
xlswrite(filename,D,sheet,xlRange)
e.Range('C2:O4').Select;
e.Selection.WrapText = true;
end
system('taskkill /F /IM EXCEL.EXE');
Beschreibung: |
|
Download |
Dateiname: |
t1.xls |
Dateigröße: |
40.5 KB |
Heruntergeladen: |
279 mal |
Beschreibung: |
Datei mit Testergebnissen |
|
Download |
Dateiname: |
test.xls |
Dateigröße: |
13.65 MB |
Heruntergeladen: |
400 mal |
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|