How to save input in loop without overwriting?

조회 수: 1 (최근 30일)
Victor Kovalets
Victor Kovalets 2015년 7월 3일
답변: Darsana Thulasi 2015년 7월 6일
The code below take input from the categories of every participant, in every block and every trial. The problem is the same information is taken in these three categories meaning it will end up overwriting the information. Although, I have seen similar forms of this question I asked, I feel that most other codes do not seem to have as much of a need to record information in the same variable as my code.
Currently the loops work fine showing different clips but when it comes to saving responses of valence on a 1-7 likert scale, this is not working. I mainly want to make the valence 1-7 information for 30 participants, in 4 blocks, with 5-9 trials per block depending on the block to be recorded and saved, but, very importantly in a way that they do not overwrite the previous information.
I have tried the idea of the code below so that the number of the subject changes each time meaning valence info for difference subjects saves in different places but even with this the blocks but this has not worked well.
Any ideas about this?
numTrials = numTrialInBlock(block);))
TrialsPerBlock = [7, 5, 7, 9];
Blocks=4
s.(sprintf('valence_subject_num%d', valence, NumTrials, TrialsPerBlock, Blocks)
subjectnum=input('Please enter subject number: ');
Condition=input('Please enter your condition: ');
s_num=int2str(subjectnum);
numblocks=2;
for block=1:numblocks
numTrials = numTrialInBlock(block);
%**************************************************************************************************************************************
% Begin trial loop
for trial=1:numtrials
set = 'ABCDEFHGI';
if(highload==1)
set = set(randperm(length(set)));
end
cgflip(1,1,1)
cgpencol(0,0,0);
preparestring(set(1),0,-200,0);
preparestring(set(2),0,-150,0);
preparestring(set(3),0,-100,0);
preparestring(set(4),0,-50,0);
preparestring(set(5),0,0,0);
preparestring(set(6),0,50,0);
preparestring(set(7),0,100,0);
preparestring(set(8),0,150,0);
preparestring(set(9),0,200,0);
cgflip
wait(2000);
cgflip(1,1,1)
cgpencol(0,0,0);
cgdraw(-size,0,size,0)
cgdraw(0,-size,0,size)
cgflip
wait(1200);
cgflip(1,1,1)
wait(100);
clipName = sprintf('./video_clips/Trauma_Clip_%d_%d.avi', block,trial);
clipWidth = 720;
clipHeight = 567;
PlayClip(clipName, clipWidth, clipHeight);
cgflip
waitkeydown(inf,71);
cgflip(1,1,1);
preparestring('Please rate the valence of the clip you just saw.',0,0,200);
valence = input('Use the keyboard keys labelled 1 to 7 to choose your rating. ');
loadpict('valence.bmp',1, 0, 0, 650, 150);
s.(sprintf('valence_subject_num%d', valence))
cgflip
Response = waitkeydown(inf,28:34);
cgflip(1,1,1);
end
header['', 'subjectnum, condition', 'valence', 'arousal', 'rt', 'accuracy']
xlswrite('study_results', header ,'sheet2', 'B2')
  댓글 수: 1
Walter Roberson
Walter Roberson 2015년 7월 3일
I think maybe the English word you are looking for is 'violence' rather than 'valence'.

댓글을 달려면 로그인하십시오.

답변 (1개)

Darsana Thulasi
Darsana Thulasi 2015년 7월 6일
You can try to create a structure for the variable response. It could look like this:
Response.(Participant_name).{blockno}(trial)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by