I'm aiming to import data from various folder and text files into matlab.
clear allmain_folder = 'E:\data'; %Directory of data
TopFolder = dir(main_folder); %exclude the first two cells as they are just pointers.
TopFolder = TopFolder(3:end);TopFolder = struct2cell(TopFolder);Name1 = TopFolder(1,:); %obtain the name of each folder
dirListing = cellfun(@(x)dir(fullfile(main_folder,x,'*.txt')),Name1,'un',0);Variables = cellfun(@(x)struct2cell(x),dirListing,'un',0);FilesToRead = cellfun(@(x)x(1,:),Variables,'un',0); %obtain the name of each text file in each folder
This provides the name for each text file in each folder within 'main_folder'. I am now trying to load the data without using a for loop (I realise that for loops are sometimes faster in doing this but I'm aiming for a compact script).
The method I would use with a for loop would be:
for i = 1:length(FilesToRead); data{i} = cellfun(@(x)dlmread(fullfile(main_folder,Name1{i},x)),FilesToRead{i},'un',0);end[~,Variable] = cellfun(@(x)fileparts(x),FilesToRead{1},'un',0);
Is there a method which would involve not using loops at all? something like cellfun within cellfun maybe? I also realise that textscan is better for importing text files, but dlmread works fine in this example.
In addition is it possible to create a variable in the workspace corresponding to 'Variable'?
Best Answer