我使用
从本地目录导入一些以下列字符和文件扩展名结尾的文件files = dir('*_eta.txt');
for file = files'
load(file.name)
end
产生预期结果,将文件加载到工作区中。
我现在希望通过将第二列拆分为另一个变量来转换这一个变量(包含两列,3003行)。
我已经有了执行此转换的代码,但是我想在文件名后面命名新变量,这次省略了' _eta'。
我尝试在extractBefore(file.name,'_eta')
循环中使用who('*_eta')
,但发现我无法生成我之后的结果。
我很欣赏MATLAB(或任何编程语言)中不建议使用动态变量名称 - 但我很惊讶我为了访问变量而挣扎太多,减少变量名称和执行一项功能。
此外,我希望将它们保留为数组,而不是将它们组合成单元格或结构。
感谢任何帮助!
编辑:动机 - 这就是我目前正在做的事情:
t = (0:0.01:10);
load('MPConst_eta.txt'); load('MVConst_eta.txt');
load('KVPConst_eta.txt'); load('KVVConst_eta.txt');
load('SLSPConst_eta.txt'); load('SLSVConst_eta.txt');
load('MPRamp_eta.txt'); load('MVRamp_eta.txt');
load('KVPRamp_eta.txt'); load('KVVRamp_eta.txt');
load('SLSPRamp_eta.txt'); load('SLSVRamp_eta.txt');
for k = 1:3
MP_Const(:,k) = MPConst_eta((k-1)*length(t)+1:k*length(t),2);
MV_Const(:,k) = MVConst_eta((k-1)*length(t)+1:k*length(t),2);
KVP_Const(:,k) = KVPConst_eta((k-1)*length(t)+1:k*length(t),2);
KVV_Const(:,k) = KVVConst_eta((k-1)*length(t)+1:k*length(t),2);
SLSP_Const(:,k) = SLSPConst_eta((k-1)*length(t)+1:k*length(t),2);
SLSV_Const(:,k) = SLSVConst_eta((k-1)*length(t)+1:k*length(t),2);
MP_Ramp(:,k) = MPRamp_eta((k-1)*length(t)+1:k*length(t),2);
MV_Ramp(:,k) = MVRamp_eta((k-1)*length(t)+1:k*length(t),2);
KVP_Ramp(:,k) = KVPRamp_eta((k-1)*length(t)+1:k*length(t),2);
KVV_Ramp(:,k) = KVVRamp_eta((k-1)*length(t)+1:k*length(t),2);
SLSP_Ramp(:,k) = SLSPRamp_eta((k-1)*length(t)+1:k*length(t),2);
SLSV_Ramp(:,k) = SLSVRamp_eta((k-1)*length(t)+1:k*length(t),2);
end
正如您所看到的,对于不同的文件,相同的操作会有很多重复 - 并且会有很多,所以想尝试以聪明的方式进行操作。
答案 0 :(得分:3)
尝试
A = load(file.name);
varname = file.name(1:end-8); % remove _eta.txt
eval([varname,'=A(:,2)']) % save the second column in the variable with name 'varname'
它很慢而且不是很优雅,但它会起作用。
编辑:您可以使用结构并将每个文件保存在一个字段中:
files = dir('*_eta.txt');
all_data = struct;
for i = 1:numel(files)
filename = files(i).name;
dummy = load(filename)
fieldname = filename(1:end-8); % remove _eta.txt
for i = 1:3
% Use the file name to create a field of the structure and save your things in the kth column
all_data.(fieldname)(:,k) = dummy((k-1)*length(t)+1:k*length(t),2);
end
end
当然,预先分配东西会让事情变得更快