Verfasst am: 13.04.2017, 15:09
Titel: Auslesen von xlsx-Tabellen mit leeren Zellen
Hallo liebe Gemeinde. Ich möchte folgendes Problem lösen. In meinem Exceldokument befinden sich elf Spalten mit 18 Zeilen. Die Daten entsprechen X und Y-Werten die ich später plotten möchte in einem Bild.
Mein Problem ist, dass eine Spalte zwar 18 Zeilen lang ist aber nur 14 zusammenhängenden Zellen Werte enthält. Die restlichen Zellen sind leer. Das Programm was ich geschrieben habe, scheint mit leeren Zellen nicht klar zu kommen. Kann mir da wer helfen?
Außerdem habe ich eine ähnliche Messung mit einer Tabelle aus 36 Zeilen und 11 Spalten. Dort befinden sich ebenfalls zusammehängende Zeilen innerhalb einer Spalte bei unterschiedlichen Startpositionen. Die Werte möchte ich auch in einem Bild darstellen.
Das strrep könnte ich mir eigentlich sparen, da mein Excel-Dokument ja das richtige Format ausgibt. RIchtig?
Ich habe die beiden Tabellen mal im Anhang beigefügt.
% ---Structure of the raw data--- %
nHead = 2; % define headerlines
nData = 18; % define datalines
Block = 1; % define amount of measurements per txt-file
nValues = 11; % define columns with important data
% ---Script for reading and writing the data--- %
FileName = [Folder 'Auswertung.xlsx'];
fid = fopen(FileName, 'r');
if fid == -1 error('Cannot open file %s', FileName);
end
Result = zeros(nData, nValues); % Matrix of the import data
Output = zeros(nfreq,Block*2); % Matrix dimension of output data
% ---Import data--- % for iHead = 1:nHead;
fgetl(fid); % Ignore header lines end
for iData = 1:nData % Write raw data
S = fgetl(fid);
S = strrep(S, ',', '.');
Value = sscanf(S, '%g', [1, nValues]); % Reading the entries in the line of the amount of nValues
Result(iData,:) = Value;
end fclose(fid);
Danke für die Antwort. Das ist ganz einfach. Weil ich die Datei als txt bekomme und in Excel bearbeite, weil ich es in Matlab (noch) nicht hinbekomme. xD
Es wäre von daher klasse, wenn ich es in der txt bearbeiten könnte. Ich habe meine Frage also etwas unpräzise gestellt.
Ich denke, das Problem lässt sich beheben, wenn das kleine Programm die Tabelle Spaltenweise ausließt. Aktuelle liest es ja zeilenweise. Hat da jemand einen schnellen Ansatz?
%---Folder which includes the measured data---%
Folder = xxx
%---Scriptfor reading and writing the data---%
FileName = [Folder 'Grobauswertung.xlsx'];
fid = fopen(FileName, 'r');
if fid == -1 error('Cannot open file %s', FileName);
end
Result = xlsread(FileName); %Matrix of the imported data
%Calculating fitting parameters
bestx = fminsearch(fun,x0) %Searching for the least uncertainty of c
yfit = bestx(1)./(sqrt((1-(xdata/bestx(2)).^2).^2+(2*bestx(3)*xdata/bestx(2)).^2)); %Forced oscillation fit
plot(Result(:,1),Result(:,2*i), '*', 'LineWidth',1) plot(xdata,yfit,'r');
xlim([01500]) ylim([08]) xlabel('tdata') ylabel('Response Data and Curve') title('Data and Best Fitting Exponential Curve') legend('Data','Fitted Curve')
Die Fitfunktion sieht wie folgt aus. Hier werden die Fehlerquadrate minimiert.
function sse = sseval(x,tdata,ydata)
A = x(1);
omega = x(2);
D = x(3);
sse = sum((ydata - A./(sqrt((1-(tdata/omega).^2).^2+4*D.^2*(tdata/omega).^2))).^2);
In spalten der Grobauswertung und den Spalten der Feinauswertung sind diverse Einträge mit NaN hinterlegt. Dort errechnet er in der Schleife einen falschen Fit. Die Fehlerausgabe ist:
Zitat:
Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option.
Current function value: NaN
Im Prinzip möchte ich, dass er fitted bis er in dem Laufparameter eine NaN findet. Geht das?
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.