2014-05-06 47 views
0

我不能讓這片代碼工作Matlab的使用文件路徑的變量textread

for i = 1:length(names) 
distrfile = ls(strcat('./sample_distributions/sample-distribution_',names{i}(6:end),'*.csv')); 
[threadlength, frequency] = textread(distrfile,'%d %d', 'delimiter', ','); 
end 

我得到distrfile值不爲空,也沒有引用不存在的文件。我也在正確的工作目錄中。如果我手動將分佈式文件的值粘貼到代碼中,如

[threadlength, frequency] = textread('distribution_44_start_50_end_100.csv','%d %d', 'delimiter', ','); 

然後它正在工作。然而我不知道什麼對象String或什麼東西包含在我的distrfile變量中,因爲我從來沒有用過matlab。我只能保證這個變量的控制檯輸出指向一個存在的文件,但我得到以下錯誤:

???錯誤使用==>文本讀取167 未找到文件。

錯誤在==> threadsplot at 65 [threadlength,frequency] = textread(distrfile,'%d%d','delimiter', ',');

回答

1

似乎通過MATLAB的ls命令返回一個char值與在distrfile末尾的一個額外的空格。試試這個(放棄最後的空字符與textread閱讀前):

distrfile = distrfile(1:end-1); 

這可能是由於MATLAB造成involking unix命令,裏面ls

[~,file_name] = unix(['ls', file_name]); 

您也可以使用dir,而不是ls ,並使用結果結構的.name字段獲取文件名:

distrfile = dir(file_name); 
[threadlength, frequency] = textread(distrfile.name,'%d %d', 'delimiter', ','); 

注意:除了這些之外,您可以直接將file_name傳遞給textread(無需ls,因爲您的外部循環在每次迭代中索引單個已知的file_name)。

+0

謝謝千次!!!我懷疑它包含最後一個換行符,但不包含空格... – nico1510

+0

表示注意:雖然文件名不完全知道。它可以在用*字符表示的部分中有所不同 – nico1510