Error "Function subindex is not defined for value of struct"

1 view (last 30 days)
Hi all,
I'm trying to read in multiple .txt files (each file around 400-900MB) which contain sensor channels channels data.I created a readIn function import_file which gives one output which is struct array of size 1X1 struct with 20 fields and value 1Xno.lines double. This array has all the variables from the data file.
function [Signals] = import_file(filename,startRow)
% Function to read in all channel information from each file.
delimiter = {'\t',' '};
formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f';
fileID = fopen(filename,'r');
dataArray = textscan(fileID,formatSPec,'Delimiter','MultipleDelimsAsOne',true,'EmptyValue',NaN,'HeaderLines',startRow-1,'ReturnOnError',false);
EXPORT = [dataArray{1:end}];
%Defining Individual channels as struct array
Signals.Time = EXPORT(:,2);
.
.
.
.
Signals.n2 = EXPORT(:,21);
fclose(fileID);
clear file ID;
The rest of program is
myfiles = dir('*.txt');
for singlefile = myfiles' % forloop to read in each file
Signals(singlefile) = import_file(file.name,startRow);% storing each file information as a structure inside signal.
end
When I try to run this program I get an error
Function 'subsindex'is not defined for values of class 'struct'
Error in RD_Test_Run(line 69)
Signals(singlefile) = import_files(singlefile.name,startRow);
Could someone please enlighten where I'm going wrong. Thank you in advance.

Accepted Answer

Matt J
Matt J on 5 Nov 2015
Edited: Matt J on 5 Nov 2015
for i=1:length(myfiles)
singlefile = myfiles(i).name % forloop to read in each file
Signals{i}= import_file(singlefile,startRow);
end
  3 Comments
Walter Roberson
Walter Roberson on 6 Nov 2015
Before the loop you can add
Signals = cell(length(myfiles),1);
but this is probably not going to make a tremendous difference. textscan() just takes time.
Beware that your code is not correct. You have
dataArray = textscan(fileID,formatSPec,'Delimiter','MultipleDelimsAsOne',true'EmptyValue',NaN,'HeaderLines',startRow-1,'ReturnOnError',false);
when you should have
dataArray = textscan(fileID, formatSPec, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'EmptyValue', NaN, 'HeaderLines', startRow-1, 'ReturnOnError',false);
Are you sure you want MultipleDelimsAsOne in conjunction with EmptyValue ?? That makes it difficult to figure out which column a particular value was intended for.
Bharath
Bharath on 6 Nov 2015
@Walter Roberson. Thanks for your answer. I'm sorry that was a typo. I edited it.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!