es gibt wieder ein kleines hindernis bei unserem projekt.
neben den daten die wir bereits auslesen, soll nun auch die körpergröße berücksichtigt und in weiterer folge teil einer berechnung werden.
der header des txt-file aus dem wir die daten auslesen sieht so aus:
Version: 111
Source File: 222
Create Date: 01/10/2000
Create Time: 13:07:34
Last Name: hugo
First Name: lala
MI:
Subject ID: ZB271003
Date of Birth: 292929
Height (cm): 172.0
Diagnosis: HD
Referral: Not Specified
Comment:
Test Type: SOT
Test Date: 01/10/2000
Test Time: 13:27:41
Operator: xxx
Condition Name: SOT
Condition Number: 1
Trial Number: 1
Data Rate (hz): 100
Accessory Channels: 0
Test Duration (sec): 20
Number of Data Points: 2000
Test Comment:
% nur die erstn 2 Chars von jedem Keyword extrahieren
test_comm1 = [];
for i=test_comm'
test_comm1 = [test_comm1 i{1}];
end% for
%
%Filenamen bilden
if(test_comm1>0)
fname = sprintf('%s_%d_%s_%s_%s.dat', ...
test_type,n,cond_num,trial_num,test_comm1);
else
fname = sprintf('%s_%d_%s_%s.dat', ...
test_type,n,cond_num,trial_num);
end%file anlegen
fid1 = fopen([[pathname filename{f}(1:end-4)filesep], fname],'wt');
% startet bei Zeile: Test Comment %
%überspringt die nächsten 2 Zeilen (" " und "Units...") for i=1:3 ;
fgetl(fid);
end %for %
%speichert Zeile COF xy bis Zeile 2000 -> (Units) %
flag = 0; % Hinweiszeichen, ob es sich um eine verkürzte Messung handelt
for i = 1 : 2000
zeile = strread(fgetl(fid),'%s','delimiter',' ');
% zeile ist nun ein Cell-Array
%
ifisempty(zeile)% Wenn die eingelesene Zeile leer ist (also keine Strings enthält), soll die For-Schleife abgebrochen werden, da das Einlesen der Messdaten beendet ist.
flag = 1; % Hinweis für verkürzten Eintrag auf "1" also "wahr" setzen. break end %if
%
zeile = [zeile{7} ' ' zeile{8}]; % hier wird nun ein String definiert, der nur die Werte der 7. und 8. Spalte enthält fprintf(fid1, '%s \n', zeile);
end %for % % % % angelegten File schliessen fclose(fid1);
% % Zeilen überspringen bis nächster Header -> Test Type if ~flag % Für flag = 0 (und damit ~flag "wahr") wird eine Zeile eingelesen. Wenn flag = 1 ist (und damit ~flag "falsch"), wird keine weitere Zeile eingelesen, weil die Leerzeile ja schon in der For-Schleife eingelesen wurde. fgetl(fid);
end %if end% while end% try % fclose(fid);
end %for
mit der zeile: height = sscanf (fgetl(fid),'Height (cm): %s'); lesen wir die höhe aus.
mit: save([pathname, filename{f},'_h.txt'], 'height', '-ascii'); wollten wir sie in einem extra-file abspeichern aber es funktioniert leider nicht. er schreibt irgendwelche 4 werte hinein, aber nicht die hoehe. ausserdem wird das file nicht im gewünschten verzeichnis abgespeichert. wir müssen zusätzlich zum pathname auch noch sagen dass er es in den darin erstellten ordner speichern soll.
Wieso allerdings nicht die richtigen Daten gespeichert werden, weiss ich nicht. Ich würde vorschlagen, die Speicherung der Daten eventuell über fprintf() zu lösen, denn da kann man das Format der Daten explizit angeben, ähnlich wie bei sscanf.
danke erstmal, wir traun uns ehrlich gesagt nicht den ganzen code umzuschreiben da der rest sehr zuverlässig funktioniert.
eigentlich sollte das auslesen der variable "height" möglich sein, da matlab im workspace den korrekten wert angibt, im txt file jedoch komischer weise nicht...
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.