Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在循环中对每个变量进行不同的命名_Matlab_Variables_For Loop - Fatal编程技术网

Matlab 在循环中对每个变量进行不同的命名

Matlab 在循环中对每个变量进行不同的命名,matlab,variables,for-loop,Matlab,Variables,For Loop,我已经创建了一个包含文件名的.dat文件。我想读入MATLAB列表中的每个文件,并给数据一个不同的名称。目前,每个迭代只覆盖最后一个迭代 我发现很多人都给出了这样的答案: for i=1:10 A{i} = 1:i; end 然而,这对我的问题不起作用。这就是我正在做的 flist = fopen('fnames.dat'); % Open the list of file names nt = 0; % Counter will go up one for each file load

我已经创建了一个包含文件名的.dat文件。我想读入MATLAB列表中的每个文件,并给数据一个不同的名称。目前,每个迭代只覆盖最后一个迭代

我发现很多人都给出了这样的答案:

for i=1:10
  A{i} = 1:i;
end
然而,这对我的问题不起作用。这就是我正在做的

flist = fopen('fnames.dat'); % Open the list of file names

nt = 0; % Counter will go up one for each file loaded
while ~feof(flist) % While end of file has not been reached
    for i = 1:6 % Number of filenames in the .dat file

    % For each file
    fname = fgetl(flist); % Reads next line of list, which is the name of the next data file
    disp(fname); % Stores name as string in fname

    nt = nt+1; % Time index

    % Save data

    data{i} = read_mixed_csv(fname, '\t'); % Reads in the CSV file% Open file
    data{i} = data(2:end,:); % Replace header row

    end
end
代码运行时没有错误,但只保存一个
数据
变量

我的fnames.dat包含以下内容: IA_2007_MDA8_O3.csv IN_2007_MDA8_O3.csv MI_2007_MDA8_O3.csv MN_2007_MDA8_O3.csv OH_2007_MDA8_O3.csv WI_2007_MDA8_O3.csv


如果可能的话,我真的想命名
数据
一些更直观的东西。像第一个文件的
IA
,第二个文件的
IN
,依此类推。有什么方法可以做到这一点吗?

循环的最后一行是问题:

data{i} = data(2:end,:);
我不知道到底发生了什么我没有运行您的代码,但是
数据(2:end,:)
指的是倒数第二个数据集,而不是倒数第二行

尝试:


循环的最后一行是问题:

data{i} = data(2:end,:);
我不知道到底发生了什么我没有运行您的代码,但是
数据(2:end,:)
指的是倒数第二个数据集,而不是倒数第二行

尝试:


循环的最后一行是问题:

data{i} = data(2:end,:);
我不知道到底发生了什么我没有运行您的代码,但是
数据(2:end,:)
指的是倒数第二个数据集,而不是倒数第二行

尝试:


循环的最后一行是问题:

data{i} = data(2:end,:);
我不知道到底发生了什么我没有运行您的代码,但是
数据(2:end,:)
指的是倒数第二个数据集,而不是倒数第二行

尝试:


如果要跟踪来自哪个文件的数据,请保存第二个单元格数组,其名称如下:

thisdata = read_mixed_csv(fname, '\t');
data{i} = thisdata(2:end,:);
names{i} = fname(1:2); % presuming you only need first two letters.

如果您需要文件名的某个特定部分的长度不总是相同,请查看
strtok
fileparts
。然后,您可以使用诸如
strcmp
之类的工具来检查单元格数组
名称
,以查找标记为
IA
的数据的存储位置或任何存储位置。

如果您想跟踪来自哪个文件的数据,请使用以下名称保存第二个单元格数组:

thisdata = read_mixed_csv(fname, '\t');
data{i} = thisdata(2:end,:);
names{i} = fname(1:2); % presuming you only need first two letters.

如果您需要文件名的某个特定部分的长度不总是相同,请查看
strtok
fileparts
。然后,您可以使用诸如
strcmp
之类的工具来检查单元格数组
名称
,以查找标记为
IA
的数据的存储位置或任何存储位置。

如果您想跟踪来自哪个文件的数据,请使用以下名称保存第二个单元格数组:

thisdata = read_mixed_csv(fname, '\t');
data{i} = thisdata(2:end,:);
names{i} = fname(1:2); % presuming you only need first two letters.

如果您需要文件名的某个特定部分的长度不总是相同,请查看
strtok
fileparts
。然后,您可以使用诸如
strcmp
之类的工具来检查单元格数组
名称
,以查找标记为
IA
的数据的存储位置或任何存储位置。

如果您想跟踪来自哪个文件的数据,请使用以下名称保存第二个单元格数组:

thisdata = read_mixed_csv(fname, '\t');
data{i} = thisdata(2:end,:);
names{i} = fname(1:2); % presuming you only need first two letters.

如果您需要文件名的某个特定部分的长度不总是相同,请查看
strtok
fileparts
。然后,您可以使用
strcmp
之类的工具来检查单元格数组
名称
,以查找标记为
IA
的数据的存储位置或存储位置。

如@Daniel所述,这是在单元格数组中存储各种大小数据的简单方法

数据{1}=thisdata(2:end,:)

但是,如果名称非常重要,则可以考虑使用结构。例如:

dataStruct(1).numbers= thisdata(2:end,:);
dataStruct(1).name= theRelevantName
当然,您也可以将它们添加到单元格数组中:

dataCell{1,1} = thisdata(2:end,:);
dataCell{1,2} = theRelevantName

正如@Daniel所提到的,在单元格数组中存储各种大小数据的简单方法

数据{1}=thisdata(2:end,:)

但是,如果名称非常重要,则可以考虑使用结构。例如:

dataStruct(1).numbers= thisdata(2:end,:);
dataStruct(1).name= theRelevantName
当然,您也可以将它们添加到单元格数组中:

dataCell{1,1} = thisdata(2:end,:);
dataCell{1,2} = theRelevantName

正如@Daniel所提到的,在单元格数组中存储各种大小数据的简单方法

数据{1}=thisdata(2:end,:)

但是,如果名称非常重要,则可以考虑使用结构。例如:

dataStruct(1).numbers= thisdata(2:end,:);
dataStruct(1).name= theRelevantName
当然,您也可以将它们添加到单元格数组中:

dataCell{1,1} = thisdata(2:end,:);
dataCell{1,2} = theRelevantName

正如@Daniel所提到的,在单元格数组中存储各种大小数据的简单方法

数据{1}=thisdata(2:end,:)

但是,如果名称非常重要,则可以考虑使用结构。例如:

dataStruct(1).numbers= thisdata(2:end,:);
dataStruct(1).name= theRelevantName
当然,您也可以将它们添加到单元格数组中:

dataCell{1,1} = thisdata(2:end,:);
dataCell{1,2} = theRelevantName


为什么不写单独的语句,每个文件一个?因为您有六个文件,所以脚本中需要六行。在这种情况下,使用
for
循环没有任何意义。问题是我最终将拥有50个文件。对每个变量进行重写是不合理的。嗯,你真的想在你的工作区中有50个不同的变量,而不是一个包含50个元素的单元格数组吗?如果您确定要使用此功能,请查看
eval
。我尝试使用eval,但不知道如何设置它。至于使用一个单元格数组,我试过了,但我做不到,因为每个变量的长度不同。在单元格数组中,元素的大小或类型没有限制。对不起,我得走了。我明天再回来看看你的问题是否还有待解决。为什么不写单独的陈述,每个文件一个?因为您有六个文件,所以脚本中需要六行。在这种情况下,使用
for
循环没有任何意义。问题是我最终将拥有50个文件。对每个变量进行重写是不合理的。嗯,你真的想在你的工作区中有50个不同的变量,而不是一个包含50个元素的单元格数组吗?如果您确定要使用此功能,请查看
eval
。我尝试使用eval,但不知道如何设置它。至于使用一个单元格数组,我试过了,但我做不到,因为每个变量都有不同的长度