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

ausleseproblem

 

noob
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2008, 11:47     Titel: ausleseproblem
  Antworten mit Zitat      
hallo zusammen,

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:


der code zum auslesen sieht so aus:



Code:

[filename pathname] = uigetfile('*.txt','multiselect','on');

    for f = 1 : length(filename)

        fid = fopen([pathname filename{f}])
        mkdir([pathname filename{f}(1:end-4)]);
        %
        % Main-Header überspringen (14 Zeilen)
        for i=1:9;
            fgetl(fid);
        end %for 2
        %
        height = sscanf (fgetl(fid),'Height (cm): %s');
         save([pathname, filename{f},'_h.txt'], 'height', '-ascii');
       
        for i=1:4;
            fgetl(fid);
        end %for 3
        %
       
            try
            n = 0;
            while 1
                %
                n = n+1
               
               % Type auslesen, der den filenamen bildet
                test_type = sscanf(fgetl(fid),'Test Type: %s');
                fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
                cond_num = sscanf(fgetl(fid),'Condition Number: %s');
                trial_num = sscanf(fgetl(fid),'Trial Number: %s');
                fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
                %
                %                
          tmp = fgetl(fid);
                test_comm = strread(tmp,'%s');
                %
                test_comm = test_comm(3:end);
                % '/' backslash eliminieren
                test_comm(ismember(test_comm,'/'))=[];
                test_comm = strrep(test_comm,'!','');
                test_comm = strrep(test_comm,',','');
                test_comm = strrep(test_comm,'.','');  
                test_comm = strrep(test_comm,'|','');
             
                %
             
                % 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  
                        %
                        if isempty(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.

kann uns wer nen tip geben wo unser fehler liegt?
Private Nachricht senden Benutzer-Profile anzeigen


keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 03.03.2008, 12:14     Titel:
  Antworten mit Zitat      
Matlab speichert die Datei in das angegebene Verzeichnis. Das ist bei euch im Moment allerdings das Verzeichnis, in der auch die Datei liegt.

Folgende Änderung sollte helfen:

Code:

fid = fopen([pathname filename{f}])
path2 = [pathname filename{f}(1:end-4) filesep]; % neuer Pfad für Datei
if ~isdir(path2)
mkdir(path2); % if-Abfrage umgeht Warnung, falls das Verzeichnis schon existiert
end
%
% Main-Header überspringen (14 Zeilen)
for i=1:9;
fgetl(fid);
end %for 2
%
height = sscanf (fgetl(fid),'Height (cm): %s');
save([path2 filename{f} '_h.txt'], 'height', '-ascii');


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2008, 13:38     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 03.03.2008, 13:52     Titel:
  Antworten mit Zitat      
Falschen Button erwischt (Editieren statt Zitieren)

[code]

Zuletzt bearbeitet von keloid am 03.03.2008, 14:42, insgesamt 3-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2008, 14:10     Titel:
  Antworten mit Zitat      
mmmm..

also das klappt nicht ganz so er schreibt dann folgendes hin:
fid =

17


fs =

-1

??? Error using ==> fprintf
Invalid file identifier -1.

Error in ==> grotest at 19
fprintf(fs,'%s',height);

dass heißt ja sovie, dass er das file nicht erstellen kann oder so??

hast du einen tipp

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 03.03.2008, 14:41     Titel:
  Antworten mit Zitat      
Die Datei muss auch zum Schreiben geöffnet werden, das hatte ich vergessen ;)

Code:

fs = fopen([path2 filename{f} '_h.txt'],'w')
 


Das sollte helfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2008, 15:04     Titel:
  Antworten mit Zitat      
danke danke danke

jetzt hats geklappt
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.