Matlab 在循环中对每个变量进行不同的命名
我已经创建了一个包含文件名的.dat文件。我想读入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
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,但不知道如何设置它。至于使用一个单元格数组,我试过了,但我做不到,因为每个变量都有不同的长度