Loop different variables from workspace

3 次查看(过去 30 天)
num = 1; -------> 475
current_file = Test_1; -----------------> test_475 (Table of name 'Test_1' in workspace)
rate = height(current_file);
for i=1:rate
rel = current_file.S;
vel = current_file.E;
time = current_file.t;
Target_v{i,1} = rel(i) + vel(i);
if i == rate
T = array2table(Target_v);
C = [current_file(:,1:3) T current_file(:,4:45)]
eval(['Dataset_' num2str(num) '= C']);
Target_v= [ ];
end
end
I want to load multiple variables that are in workspace in a for loop add a column to each one of them and save them with another name or export them to excel. How can I do this?
  4 个评论
Stephen23
Stephen23 2019-12-16
"I want to load multiple variables that are in workspace in a for loop..."
If they are already in the workspace then they have already been loaded (unless you wrote out all of those names by hand), so most likely the best choice would be to simplify your code and load the data into one array (e.g. a cell array, a structure, a table, etc.).
Note that having many numbered variables is a sign of badly designed data.
"...add a column to each one of them and save them with another name or export them to excel."
Easy with basic indexing into one variable.
Mariana
Mariana 2019-12-16
mat = dir('*.mat');
for q = 1:1
load(mat(q).name); I load the first mat file from a struct
----- it load all the tables in the workspace, but how do I modify each one of them? without using sprintf or eval.
end

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2019-12-16
编辑:Stephen23 2019-12-16
The most important thing is to always load into an output variable:
Q = load(...) % Q is a scalar structure
where the fields of Q contain the variables from the .mat file. From there it is easy to access the fields using dynamic fieldnames:
As a special case, if each .mat file contains exactly one variable (e.g. a table) each with a different name, then you can use struct2cell quite effectively:
D = 'C:\Users\yourname\yourwork'; % absolute/relative path to where the files are saved
S = dir(fullfile(D,'*.mat'));
for k = 1:numel(S)
Q = load(fullfile(D,S(k).name));
C = struct2cell(Q);
T = C{1}; % T will be your table
... do whatever you want with T,
... then save it in a CSV file:
F = fullfile(D,sprintf('newfile_%d.csv',k));
writetable(T,F)
... or store it for accessing after the loop:
S(k).table = T;
end

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by