0

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

0 Answers0