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

Daten aus unterschiedlichen Dateipfaden auslesen

 

778
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2016, 13:55     Titel: Daten aus unterschiedlichen Dateipfaden auslesen
  Antworten mit Zitat      
Hallo,

ich arbeite erst seit kurzem mit MATLAB und benutze es, um aus txt und xlsx Dateien Daten auszulesen. Dazu habe ich in einem Ordner 46 txt Dateien, aus denen ich einen bestimmten Wert auslesen möchte, den ich dann vernwenden will, um mit der gleichnamigen xlsx Datei in einem anderen Ordner eine Berechnung zu machen (Jede meiner Versuchspersonen [VPN] hat also eine txt und eine xlsx Datei). Hier ein Beispiel, wie die Datenstrukturen aussehen:

Dump001_vp01.txt

#Study : Validierungsstudie_VP1-30
#Date : 20160627 09:54:14
#Version : 6.1.2624.1
#TestRunDate : 20160420 11:54:15.885 (+02:00)
# Applied FACET Baseline: Joy=(-1.328449), Anger=(-2.234176), Surprise=(-4.230706), Fear=(-2.561434), Contempt=(2.324024), Disgust=(-1.193082), Sadness=(-1.851006), Neutral=(-0.8040849), Positive=(-1.328449), Negative=(2.324024)


Dump001_vp01.xlsx

Joy Evidence Anger Evidence
-0,698272705 -0,084921598
-0,686473846 -0,183844566
-0,612908363 0,010836363
-0,389035583 0,018592834
-0,581938863 -0,067827463
-0,377240658 -0,275228024
-0,0901196 -0,10065484
-0,204508066 -0,232446671

Dazu habe ich folgendes Script geschrieben:

Code:
%%Threshold mit Baseline_by_Facet
VP_path = 'C:\Users\Penv460\Documents\MATLAB\MATLAB Scripte\Test';
subject=dir;
VP_Anzahl=size(subject,1)-2;
cd ..
for l=1:VP_Anzahl
    [T_Emotion(1,:)]=Threshold_Baseline_by_Facet(subject(l+2).name);
   
end


Matlab soll also für jede Versuchsperson nacheinander die gleiche Funktion ausführen. Die Funktion sieht bisher folgendermaßen aus:

Code:
function [ T_Emotion ] = Threshold_Baseline_by_Facet( VPN )
%UNTITLED6 Summary of this function goes here
%   Detailed explanation goes here

%% Baseline_by_FACET
VP_path_Baseline = 'C:\Users\Penv460\Documents\MATLAB\MATLAB Scripte\Data4Baseline_by_FACET';
cd(VP_path_Baseline);
subject_Baseline=dir;
VP_Anzahl_Baseline=size(subject_Baseline,1)-2;

fid_rein = fopen(VPN); % Dateneinlaesen

disp(VPN)
disp('Start finding Baseline')

while 1
    zeileninhalt = fgetl(fid_rein);
    if ~ischar(zeileninhalt), break, end %Abbruch, falls Dateiende, Variable wird zu -1
   
    Joy_gefunden = strfind(zeileninhalt,'Joy=(');
    if Joy_gefunden ~=0,
        Joy_Baseline_byFacet=str2num(zeileninhalt(32:40));
    end
    Anger_gefunden = strfind(zeileninhalt,'Anger=(');
    if Anger_gefunden ~=0,
        Anger_Baseline_byFacet=str2num(zeileninhalt(51:59));
    end
end

fclose(fid_rein);
disp('done')
cd ..

%% Thresholding mit Baseline_by_FACET
VP_path = 'C:\Users\Penv460\Documents\MATLAB\MATLAB Scripte\Test';
cd(VP_path);
subject=dir;
VP_Anzahl=size(subject,1)-2;

[~,~,raw] = xlsread(VPN);
disp('Start finding Marker')
Marker=[raw{2:end,62}]; %Marker finden ACHTUNG! alles MINUS 1
Indices52 = find(Marker==52);
Indices51 = find(Marker==51);
Indices62 = find(Marker==62);

Indices61 = find(Marker==61);
disp('done')

disp('Start reading Evidence Scores')
AngerEvidence_raw_Rohwerte=[raw{2:end,22}]; %Erstellung Vektor AngerEvidence
AngerEvidence_raw=AngerEvidence_raw_Rohwerte - Anger_Baseline_byFacet;
JoyEvidence_raw_Rohwerte=[raw{2:end,20}]; %Erstellung Vektor JoyEvidence
JoyEvidence_raw=JoyEvidence_raw_Rohwerte - Joy_Baseline_byFacet;
disp('done')
disp('Start Thresholding')
disp(VPN)

for l = 1:size(Indices52,2) %Loop Sequenzierung Trigger + 110 EvidenceScore
    Trigger52(l,:) = JoyEvidence_raw(Indices52(l): Indices52(l)+109);

    Baseline52= JoyEvidence_raw(Indices52(l)-15: Indices52(l)-1);
    MeanBaseline52=mean(Baseline52,'omitnan');
    Trigger52_baselined(l,:)=Trigger52(l,:)-MeanBaseline52;

    Trigger52_maximum=max(Trigger52_baselined,[],2);
    Trigger52_mean_maximum=mean(Trigger52_maximum);
    Trigger52_minimum=min(Trigger52_baselined,[],2);
    Trigger52_mean_minimum=mean(Trigger52_minimum);
    Trigger52_Threshold=0.5;
end

%Hits Trigger52
    Trigger52_Hits_perTrial=sum(Trigger52_maximum > Trigger52_Threshold,2);
    Trigger52_Hits=sum(Trigger52_Hits_perTrial > 0);

 for l = 1:size(Indices51,2) %Loop Sequenzierung Trigger + 110 EvidenceScore
    Trigger51(l,:) = AngerEvidence_raw(Indices51(l): Indices51(l)+109);

    Baseline51= AngerEvidence_raw(Indices51(l)-15: Indices51(l)-1);
    MeanBaseline51=mean(Baseline51,'omitnan');
    Trigger51_baselined(l,:)=Trigger51(l,:)-MeanBaseline51;

    Trigger51_maximum=max(Trigger51_baselined,[],2);
    Trigger51_mean_maximum=mean(Trigger51_maximum);
    Trigger51_minimum=min(Trigger51_baselined,[],2);
    Trigger51_mean_minimum=mean(Trigger51_minimum);
    Trigger51_Threshold=0.5;
 end
 
    %Hits Trigger51
    Trigger51_Hits_perTrial=sum(Trigger51_maximum > Trigger51_Threshold,2);
    Trigger51_Hits=sum(Trigger51_Hits_perTrial > 0);
 
for l = 1:size(Indices52,2) %Loop zur Seuqenzierung der Trigger im Gegenmuskel
    Trigger52_Anger(l,:) = AngerEvidence_raw(Indices52(l): Indices52(l)+109);

    Baseline52_Anger= AngerEvidence_raw(Indices52(l)-15: Indices52(l)-1);
    MeanBaseline52_Anger=mean(Baseline52_Anger,'omitnan');
    Trigger52_baselined_Anger(l,:)=Trigger52_Anger(l,:)-MeanBaseline52_Anger;
    Trigger52_Anger_maximum=max(Trigger52_baselined_Anger,[],2);
end
    %Tigger52 Omissions
    Trigger52_Omissions1_perTrial=sum(Trigger52_maximum < Trigger52_Threshold,2);
    Trigger52_Omissions2_perTrial=sum(Trigger52_Anger_maximum < Trigger51_Threshold,2);
    Trigger52_Omissions=sum(Trigger52_Omissions1_perTrial & Trigger52_Omissions2_perTrial > 0);
   
    %Trigger52 false positives
    Trigger52_FalsePositive1_perTrial=sum(Trigger52_maximum < Trigger52_Threshold,2);
    Trigger52_FalsePositive2_perTrial=sum(Trigger52_Anger_maximum > Trigger51_Threshold,2);
    Trigger52_FalsePositive=sum(Trigger52_FalsePositive1_perTrial & Trigger52_FalsePositive2_perTrial > 0);

for l = 1:size(Indices51,2) %Loop zur Seuqenzierung der Trigger im Gegenmuskel

 %  [...] AN DIESER STELLE HABE ICH EINEN TEIL DES CODES AUSGESCHNITTEN; %WEIL ER SICH QUASI FÜR UNTERSCHIEDLICHE MARKER AUF DIE GLEICHE WEISE %WIEDERHOLT!

disp(VPN)
disp('done')

Subject = cellstr(VPN);
T_Emotion = table(Subject,Trigger52_Hits,Trigger52_Omissions,Trigger52_FalsePositive,Trigger51_Hits,Trigger51_Omissions,Trigger51_FalsePositive,Trigger62_Hits,Trigger62_Omissions,Trigger62_FalsePositive,Trigger61_Hits,Trigger61_Omissions,Trigger61_FalsePositive);
end
 

Es ergeben sich immer wieder folgende Fehler:
1.
Dump001_vp01.txt
Start finding Baseline
done
Error using xlsread (line 251)
File C:\Users\Penv460\Documents\MATLAB\MATLAB Scripte\Data4Baseline_by_FACET\Dump001_vp01.txt not in
Microsoft Excel Format.

Error in Threshold_Baseline_by_Facet (line 41)
[~,~,raw] = xlsread(VPN);

2.
Undefined function or variable 'Joy_Baseline_byFacet'.

Error in Threshold_Baseline_by_Facet (line 28)
Joy_Baseline_byFacet(VPN)=Joy_Baseline_byFacet;

Schon mal ein großes Danke an alle, die sich bis zu dieser Stelle mit meiner Anfrage in diesem Forum beschäftigt haben. Ich hoffe, ich konnte mein Problem so formulieren, dass es klar wird. Ich wäre sehr dankbar, wenn mir jemand meinen Fehler erklären könnte und vielleicht auch eine Lösung vorschlagen würde.

liebe Grüße,
778
edit winkow: bitte code umgebung verwenden.
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 22.07.2016, 08:45     Titel:
  Antworten mit Zitat      
Wenn du dir die Fehlermeldung genau durchließt, siehst du, dass du versuchst, eine TXT-Datei mit xlsread zu lesen.
Zitat:
Error using xlsread (line 251)
File C:\Users\Penv460\Documents\MATLAB\MATLAB Scripte\Data4Baseline_by_FACET\Dump001_vp01.txt not in
Microsoft Excel Format.


Wenn ich in deinen viel zu lange Code schaue (-> Minimalbeispiel heißt minimalbeispiel, weil es minimal sein soll! Beim erstellen dieses, wäre dir die Fehler evt. sogar selber aufgefallen.)
steht da:
Code:

[~,~,raw] = xlsread(VPN);
 

VPN enthält wohl den string mit txt am ende - wird ja auch so übergeben. Wenn du diesen abänderst, zu xls/xlsx sollte es gehen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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 - 2025 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.