我需要从文件名为enh0.dat,enh1.dat,enh2.dat,...的文件中加载数据,最多128次。因此,我需要将文件名存储在字符串变量中,并从文件中加载数据,该文件的名称存储在字符串变量中,然后将加载的数据存储在指定的变量中以便稍后进行绘图。但MATLAB load
命令将数据加载到具有特定名称(包含数据的文件的名称)的变量中,这不允许我自动使用plot命令。
是否可以在字符串变量中存储我需要加载数据的文件的名称?我也检查过这个
MATLAB newbie: problem reading in file when the file name is stored in a string,但它看起来不适合我。尝试绘制textscan
:
???使用==>时出错plot无法从单元格转换为double。
这是使用的代码:
indx = [1:128];
enh_file_cntr = 0;
enh_pre = 'enh';
gain_pre = 'gain';
[enh_file_cntr_str, errmsg1] = sprintf('%d', enh_file_cntr);
enh_file_name = strcat('enh', enh_file_cntr_str, '.dat');
[gain_file_cntr_str, errmsg1] = sprintf('%d', enh_file_cntr);
gain_file_name = strcat('enh', gain_file_cntr_str, '.dat');
fid_enh = fopen(enh_file_name, 'r');
fid_gain = fopen(gain_file_name, 'r');
enh_data = textscan(fid_enh, '%f', 128);
gain_data = textscan(fid_gain, '%f', 128);
subplot(2,3,1);
plot(indx, enh_data, 'b', indx, gain_data, 'r');
如果这样可行,我将在enh_file_cntr
循环中递增for
的值。我该如何修复上述代码?
答案 0 :(得分:1)
首先:plot
函数接受数值矩阵类型的输入。您正在尝试输入textscan
函数的输出,该函数是一个单元格数组。在您的情况下,单元格数组的第一个元素包含数字矩阵,但该对象本身不是数字矩阵。要检索存储在单元格内的数字矩阵,请使用:
enh_data = enh_data{1};
在调用绘图函数之前。 注意:访问单元格数组的元素时,请始终使用花括号,即{}
。访问数值矩阵的元素时,请使用常规括号,即()
。如果您的单元格数组包含多个单元格,则可以使用()
对其进行切片。
当然,单元格数组中的单元格本身可以包含单元格数组,但现在可能不用担心: - )
第二:确保使用fopen
关闭您打开的所有文件。即,一旦您使用textscan
,请使用fclose(fid_enh)
再次关闭该文件。
第三,我不太清楚通过将文件名存储在字符串中来理解你的意思吗?您似乎正在使用enh_file_name
变量?
答案 1 :(得分:1)
听起来您也可以使用load命令来读取数据。
要解决创建的变量名称问题,您需要做的就是使用load命令指定和输出变量。
我想你最初尝试过
load(enh_file_name)
并发现创建的变量是变量enh_file_name中的filename。
你只需要使用
enh_data = load(enh_file_name)
这样做的另一个好处是你不必处理细胞变量。