比如如下matlab程序
for i=1:16
eval(['y = textread(''',path,'\',foldername,'_1\',filename1,num2str(i),'.txt'',''%n'');']);
eval(['b(:,',num2str(i),'-0) = y;']);
end
是不是感觉很难读?
其实当时这么写的目的很简单,就是想让matlab循环读出文件夹里按数字顺序排列的txt。
用eval确实可以实现目的,但是其中‘’的应用会读起来很费劲。
代码中使用了 eval
函数来执行一个字符串表达式,这通常不是必要的,因为 textread
可以直接调用。
这段代码中还有一些潜在的问题:
-
字符串的转义字符
''
可能不正确。在 MATLAB 中,如果您需要在字符串内部包含单引号'
,您应该使用两个单引号''
来表示一个单引号。 -
eval
函数的使用通常不推荐,因为它可能导致代码难以阅读和调试。在大多数情况下,您可以直接执行表达式而不需要eval
。 -
filename1
和i
应该是在调用此代码之前定义的变量。 -
num2str(i)
将变量i
转换为字符串,以便在文件名中使用。 -
'%n'
是textread
的格式字符串,它告诉 MATLAB 读取整数类型。
要避免使用 eval
,一个更直接的代码示例可能是:
% 假设 path, foldername, filename1 已经被定义
% 以及 b 是一个足够大的矩阵,用于存储读取的数据
for i = 1:16
% 构建文件名
filename = fullfile(path, foldername, ['_1', filename1, num2str(i), '.txt']);
% 读取文件内容到 y
y = textread(filename, '%n');
% 将读取的数据赋值给矩阵 b 的对应列
% 假设 y 的长度与 b 矩阵的行数相匹配
b(:, i) = y;
end
这里,fullfile
函数用来构建完整的文件路径,textread
直接调用以读取文件内容到变量 y
。
如果 eval
是必须使用的,确保字符串表达式正确构造,并且所有变量在使用前已经定义。