Iterating through library of text files (for use with Matlab CODER)

1 view (last 30 days)
Hi, I am writing some code that needs to iterate through text files from a library. I read in the data from the text file (from the library) and I compare it to another dataset and compute the similarities between the two datasets. I was able to get this working within the MATLAB environment, but I have been having issues using this code with MATLAB's built-in C Coder.
I keep getting errors stating that: "Referencing a component from array of non-scalar values is not supported for code generation"
Which is confusing given that the datasets only contain positive scalar values. Here is the code I am trying to use:
function [name, M_FDLS, M_CO, M_CC, M_FDAV] = Spectrum_Match(s, wave)
%%Match
% Reads as input a path to a text file corresponding to the Raman Spectrum
% we wish to identify.
%
% Uses a suite of data matching statistics to compute the % match between
% a sample and all members of a library.
%
%%Error handling
if wave == 514
lib_path = '/Volumes/ROEL/RamanProject/Library_copy/514nm_interp/';
elseif wave == 780
lib_path = '/Volumes/ROEL/RamanProject/Library_copy/780nm_interp/';
else
error('Error: please enter correct library wavelength');
end
%%Read Data and check for matches in library
samp_pre = spectra_read(s);
sz = 0; sz = size(samp_pre,1);
if sz ~= 5866
samp = interp_spectrum(samp_pre);
else
samp = samp_pre;
end
ref = zeros(5866,2);
coder.extrinsic('strcat', 'dir');
lib_files = '';
base = '';
lib_form = strcat(lib_path, '*.txt'); lib_files = dir(lib_form);
name = cell(length(samp),1); M_CC = zeros(length(samp),1);
M_FDLS = zeros(length(samp),1); M_CO = zeros(length(samp),1);
M_FDAV = zeros(length(samp),1);
ind = 1; file = ''; cur_file = ',';
for file = lib_files'
base = file.name; cur_file = strcat(lib_path, base);
ref = spectra_read(cur_file);
name{ind} = file.name;
M_FDLS(ind) = FDLS_Matching(ref, samp);
M_CO(ind) = CO_Matching(ref, samp);
M_CC(ind) = CC_Matching(ref, samp);
M_FDAV(ind) = FDAV_Matching(ref, samp);
ind = ind + 1;
end
end

Answers (1)

Don Zheng
Don Zheng on 18 Jul 2017
Try changing
for file = lib_files'
to
for i = 1:numel(lib_files)
file = lib_files(i);

Categories

Find more on MATLAB Coder in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!