MATLAB Answers

0

How to replace part of string of cell array inside for loop

Asked by Danupon Subanapong on 16 Nov 2018
Latest activity Commented on by Danupon Subanapong on 17 Nov 2018
Hi!! I would like to ask for some help. I am now importing a number of input data. I attacheh some examples of input files. Please refer to them. Some file contains some missing data. I would like to replace the missing data by some value. I have coded as below.
for j=1:5
File_name_i(j,1)=string(sprintf('%s%u%s','File',j,'.txt');
fid(j,1)=fopen(File_name_i(j,1));
f(j,1)=textscan(fid(j,1),'%s', 'delimiter','\n');
fclose(fid(j,1));
Data{j}=regexprep(f{j,1},'**********','0000.00'); %% ********** is one form of missing data and I want to replace these missing data by 0
Data{j}=regexprep(f{j,1},'NaN','0000.00'); %% NaN is another form of missing data and I want to replace these missing data by 0
Data1{j,1}=Data{j}(4:end,:);
end
Later, I will convert this cell array (Data1) to array.
However, the code above doesn't work. I have tried to it regexprep individually (without loop) and it works. So, I think the problem is to use regexprep inside for loop.
Could you please give me some suggestion or solution to this problem?
Thank you in advance

  1 Comment

What do mean "it doesn't work"? I tested it on the first file and it works fine. If you're getting an error, share the entire error message and point to which line is causing it. If you're getting unexpected results describe the results you expect to get and how they differ from the results you're getting.

Sign in to comment.

Products


Release

R2018a

1 Answer

Answer by per isakson
on 16 Nov 2018
Edited by per isakson
on 16 Nov 2018
 Accepted Answer

A slightly different approach
%%
File_name_i = string.empty(5,0);
for j=1:5
File_name_i(j,1)=string(sprintf('%s%u%s','File',j,'.txt'));
str = fileread( File_name_i(j,1) );
%
% ********** is one form of missing data and I want to replace these missing data by 0
% NaN is another form of missing data and I want to replace these missing data by 0
str = strrep( str, '**********', '0.0' );
str = strrep( str, 'NaN', '0.0' );
Data(j,1) = textscan( str,'%f%f%f%f%f', 'Delimiter',' ', 'CollectOutput',true );
end
"regexprep inside for loop" shouldn't be a problem, however, it's a bit of over-kill.

  1 Comment

Sign in to comment.