2016-07-05 114 views
0

我有两列的.txt文件,我想导入并使用第二列进行后续操作。我的文本文件的名称为:profileA1.txt,​​,等...和对应于第二列的数据我的变量在随后的代码命名为A1A2A3,等...Matlab:如何使用名称为变量名打开多个.txt文件

代码工作,但目前我有使用导入数据向导手动打开每个.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 
+0

可能重复[读取多个文本文件并将它们中的每一个导入为列](http://stackoverflow.com/questions/3459592/how-to-read-multiple-files-into-a-single-cell-数组) – GameOfThrows

+0

数据文件的格式是什么?你能解释一下你提供的代码块的逻辑吗?没有任何意义。你为什么同时使用'importdata'和'load'? “Aloop”的目的是什么?为什么当你创建'myfilename'作为字符串时,你想要访问'myfilename'的'data'字段? 'load'语法来自哪里?我强烈推荐阅读[MATLAB的文档](http://www.mathworks.com/help/matlab/),它非常全面。 – excaza

+0

经过一番搜索之后好了,我设法用这个命令行来做我想做的事:'A15 = dlmread('profileA15.txt','\ s',1,1)''。但现在,我怎么能在15到19之间形成一个循环。 – JohnDeuf

回答

0

你的例子是有点过,因为你从一个字符数组转换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 

你可以跳过这个读数作为一个字符数组第一,但我有一个功能已经所以我只是重复使用它。