for loop with eval and sprintf with underscore in
5 次查看(过去 30 天)
显示 更早的评论
Sorry about that,
I've been trying really hard to find any solution from other answers, but or I don't understand them or it doesn't work.
I've also red that is bad to dynamically use 'eval' and 'sprintf', however, even though I'm willing to learn, I am not able to do in another way (and I've tried it).
I've many .txt file:
X12345678_1_ABC_ABCD_ABCDE_ABCDEF.txt
% Load .txt files into workspace
files = dir('*.txt');
for i=1:length(files);
eval(['load ' files(i).name ' -ascii']);
end
%% I dynamically try to do something with my variable
for i=1:length(files);
filename = files(i).name(1:end-4); %%%I get out the .txt
temp = eval(sprintf('X%s\_1\_ABC\_ABCD\_ABCDE\_ABCDEF',filename));
%insert the matrix of the text file into a new 3D matrix
threeD_matrix (i,:,f) = temp;
end
Warning: Escape sequence '_' is not valid. See 'help sprintf' for valid escape sequences. Error using eval Undefined function or variable
Thank you so much for your help!!!!!
1 个评论
回答(2 个)
Jan
2014-4-7
Two general advices:
1. Avoid eval in general:
eval(['load ' files(i).name ' -ascii']);
Better:
load(files(i).name, '-ascii');
2. Join folder names by fullfile instead of sprintf with hard coded separators.
Star Strider
2014-4-7
编辑:Star Strider
2014-4-7
To put a backslash (\) into a string, you need to use a double backslash (\\):
filename = 'myfile.txt';
R = sprintf('X%s\\_1\\_ABC\\_ABCD\\_ABCDE\\_ABCDEF', filename)
produces:
R =
Xmyfile.txt\_1\_ABC\_ABCD\_ABCDE\_ABCDEF
The ‘eval’ function is not considered efficient programming practice, but it may be the only way to get a variable generated as a string into the workspace as a variable. It is not really ‘wrong’ though.
10 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!