1

我需要从文件名为 enh0.dat、enh1.dat、enh2.dat、...的文件中加载数据,最多 128 次。所以我需要将文件名存储在字符串变量中并从文件中加载数据,文件名存储在字符串变量中,然后将加载的数据存储在指定的变量中以供以后绘制。但是 MATLABload命令将数据加载到具有特定名称(包含数据的文件的名称)的变量中,这不允许我自动使用 plot 命令。

是否可以将我需要从中加载数据的文件的名称存储在字符串变量中?我还检查了这个 MATLAB 新手:当文件名存储在字符串中时读取文件时出现问题,但它看起来对我不起作用。尝试绘制以下结果时出现此错误textscan

???使用 ==> plot 时出错 从单元格转换为双精度是不可能的。

这是使用的代码:

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_cntrfor循环中增加 的值。如何修复上述代码?

4

2 回答 2

1

首先:该plot函数接受数值矩阵类型的输入。您正在尝试输入textscan作为元胞数组的函数的输出。在您的情况下,元胞数组的第一个元素包含一个数字矩阵,但该对象本身不是一个数字矩阵。要检索存储在单元格内的数字矩阵,请使用:

enh_data = enh_data{1};

在调用绘图函数之前。注意:访问元胞数组的元素时,请始终使用大括号,即{}. 访问数值矩阵的元素时,请使用正则括号,即(). 如果您有一个包含多个单元格的单元格数组,您可以使用().

当然,元胞数组中的一个元胞本身可以包含一个元胞数组,但现在可能不用担心这个:-)

第二:确保关闭您打开的所有文件fopen。即,一旦您使用过textscan,然后使用 再次关闭文件fclose(fid_enh)

第三,我不太确定我是否理解将文件名存储在字符串中的意思?enh_file_name您似乎在上面的代码片段中使用变量完全做到了这一点?

于 2012-09-24T02:05:33.250 回答
1

听起来您也可以使用 load 命令来读取数据。

要解决创建变量名的问题,您需要做的就是使用 load 命令指定和输出变量。

我想你最初尝试过

load(enh_file_name)

并发现创建的变量是变量 enh_file_name 中的文件名。

你只需要使用

enh_data = load(enh_file_name)

这样做的好处是您不必处理单元格变量。

于 2012-09-24T04:02:21.123 回答