【问题标题】:Matlab : How to open several .txt files using their names for variable namesMatlab:如何使用变量名称打开几个 .txt 文件
【发布时间】:2016-07-05 15:28:34
【问题描述】:

我有几个 2 列的 .txt 文件,我想导入并使用第二列进行后续操作。我的文本文件命名为:profileA1.txtprofileA2.txt等……我的第二列数据对应的变量在后面的代码中命名为A1A2A3等……

代码有效,但目前我必须使用导入数据向导手动打开每个.txt 文件,更改第二列的名称并单击导入选择。我尝试编写代码(见下文)来自动化这些步骤,但它不起作用?任何人有任何想法来修复此代码?

谢谢

for k = 1:5
     myfilename = sprintf('profileA%d.txt', k);
     mydata = importdata(myfilename);
     Aloop = ['A' num2str(k)];
     A{k} = load(myfilename.data(:,2), k);
end

【问题讨论】:

  • 您的数据文件的格式是什么?你能解释一下你提供的代码块背后的逻辑吗?这些都没有任何意义。为什么你同时使用importdataloadAloop 的目的是什么?当您将myfilename 创建为字符串时,为什么要尝试访问myfilenamedata 字段? load 语法从何而来?我强烈推荐阅读MATLAB's documentation,它非常透彻。
  • 好吧,经过一番搜索,我设法用这个命令行做我想做的事:'A15 = dlmread('profileA15.txt', '\s',1,1)'。但是现在,我怎样才能在 15 到 19 之间进行循环。

标签: matlab


【解决方案1】:

您的示例有点偏离,因为您神奇地将myfilename 从字符数组转换为结构。我会通过将整个文本文件读入一个字符单元数组然后使用cellfuntextscan 读取列来解决这个问题。像这样:

function C = ReadTextFile(infile)
if (exist(infile, 'file') ~= 2)
    error('ReadTextFile:INFILE','Unknown file: %s.\n', infile);
end

fid = fopen(infile, 'r');
C = textscan(fid, '%s', 'delimiter','\n');
C = C{1};
fclose(fid);

end

% assign an output file
outFile = 'SomeRandomFile.mat';

for k = 1:5
    C = ReadTextFile(sprintf(‘profileA%d.txt’, k));
    val = cell2mat(cellfun(@(x) textscan(x, '%*f %f','CollectOutput',1),C));
    varName = sprintf('A%d', k);        
    assignin('base', varName, val);
    save(outFile, varName, '-append')
end

您可以先将整个阅读作为字符数组跳过,但我已经拥有该功能,所以我只是重复使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多