2016-07-05 111 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 

你可以跳過這個讀數作爲一個字符數組第一,但我有一個功能已經所以我只是重複使用它。