加载存储在字符串中的文件名,然后绘制数据

时间:2012-08-08 17:47:21

标签: matlab file-io mat-file

我正在尝试创建一个脚本,要求用户提供txt文件的文件名,该文件的内容稍后会被绘制。

filename = input('What is the filename (without the extension) e.g. RCP6: ','s');
if isempty(filename)
    filename=input('What is the filename (without the extension) e.g. RCP6: ','s');
end

ext =  input('What is the filetype (extension) e.g. .txt: ','s');
if isempty(ext)
    ext=input('What is the filetype (extension) e.g. .txt: ','s');
end

filew = strcat(filename,ext)

load(filew)
A = filename
Y = A(:,1)
E = A(:,2)

plot(Y,E)
xlabel('calendar year')
ylabel('annual fossil carbon emissions (GtC)')

如上所述,代码正确连接文件名和ext,但是,似乎load(filew)没有正确加载该文件,因为例如给定文件名= RCP3PD,Y = R和E = C,而不是Y存储来自RCP3PD.txt?

的第一列值

有什么建议吗?我已经看到其他“来自字符串的加载文件”线程引用了sprintf()函数 - 这会适用于此吗?

1 个答案:

答案 0 :(得分:0)

加载数据时,需要将其保存为某些内容。所以:

load(filew)

应该是

data = load(filew);

然后访问您的变量只需使用:

A = data.A; % assume that data is a struct with a field named A
Y = A(:,1);
E = A(:,2);

其他想法

您可以考虑将输入文件名的逻辑更改为:

valid = 0;
while(valid==0)
  filename = input('What is the filename (without the extension) e.g. RCP6: ','s');
  ext =  input('What is the filetype (extension) e.g. .txt: ','s');
  if exist([filename, ext], 'file')
    valid = 1;
  end
end

不是检查文件名是否为空,而是检查用户是否提供了实际存在的文件名/扩展名对。如果没有,那就继续问,直到他们这样做。

如果您想获得幻想,可以使用uigetfile而不是要求用户输入文件名。这为用户提供了一个文件选择器窗口,这样您就知道他们已经选择了一个有效的文件。此外,它允许您过滤用户可以选择的文件。