MATLAB - 使用存储为字符串变量的文件名从文件加载数据

时间:2012-09-24 01:36:21

标签: file matlab

我需要从文件名为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的值。我该如何修复上述代码?

2 个答案:

答案 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)

这样做的另一个好处是你不必处理细胞变量。