I am trying to write a code in matlab that iterate throw 109 folder and each folder has .edf files inside it I am trying to process into all these .edf files base on their names which named enumerated and then store all the events that splited in the variable S and the labels of the events in X variable. I get an error (Index exceeds the number of array elements. Index must not exceed 4. Error in iterating2 (line 21) run_num = str2double(folder_name(4:5));) when I try the code below:
function [S, X] = iterating2(data_dir)
% list all folders in the data directory
folders = dir(data_dir);
folders = folders([folders(:).isdir]);
folders = folders(~ismember({folders(:).name},{'.','..'}));
% initialize S and X
S = zeros(15, 656, 64, length(folders));
X = cell(length(folders), 1);
% iterate over each folder
for folder_idx = 1:length(folders)
folder_name = folders(folder_idx).name;
folder_path = fullfile(data_dir, folder_name);
% list all files in the folder
files = dir(folder_path);
files = files(~ismember({files(:).name},{'.','..'}));
% extract the run number from the folder name
run_num = str2double(folder_name(4:5));
% initialize label array for this folder
labelArray = cell(15, 1);
% iterate over each file in the folder
for file_idx = 1:length(files)
file_name = files(file_idx).name;
% check if file is an EDF file
if strcmpi(file_name(end-3:end), '.edf')
% read in the EDF file
[header, recorddata] = edfread(fullfile(folder_path, file_name));
Y = recorddata(1:64,:);
% create label array for this file
labelFile = zeros(15, 1);
for ii = 1:30
if isempty(strfind(C{1, 1}{ii*2 + 2, 1},'T1')) == 0
labelFile(ii) = 1;
elseif isempty(strfind(C{1, 1}{ii*2 + 2, 1},'T2')) == 0
labelFile(ii) = 2;
else
labelFile(ii) = 0;
end
end
labelFile = labelFile(2:2:30);
% iterate over each channel in the EDF file
for j=1:64
for i=1:15
shift=i*672+(i-1)*656;
Start=1+shift; End=656+shift;
S(i,:,j,folder_idx)=Y(j,Start:End);
end
end
end
end
% set labels for this folder based on the run number and label file
for ii = 1:30
if isempty(strfind(C{1, 1}{ii*2 + 2, 1},'T1')) == 0
labelArray{ii} = 'T1';
elseif isempty(strfind(C{1, 1}{ii*2 + 2, 1},'T2')) == 0
labelArray{ii} = 'T2';
else
labelArray{ii} = 'T0';
end
X{folder_idx} = labelArray;
end
end
end