【matlab】尽量少使用eval,多用fullfile来执行可变字符串拼接

比如如下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 可以直接调用。

这段代码中还有一些潜在的问题:

  1. 字符串的转义字符 '' 可能不正确。在 MATLAB 中,如果您需要在字符串内部包含单引号 ',您应该使用两个单引号 '' 来表示一个单引号。

  2. eval 函数的使用通常不推荐,因为它可能导致代码难以阅读和调试。在大多数情况下,您可以直接执行表达式而不需要 eval

  3. filename1i 应该是在调用此代码之前定义的变量。

  4. num2str(i) 将变量 i 转换为字符串,以便在文件名中使用。

  5. '%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 是必须使用的,确保字符串表达式正确构造,并且所有变量在使用前已经定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙约架

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值