Filter löschen
Filter löschen

Loop different variables from workspace

3 Ansichten (letzte 30 Tage)
Mariana
Mariana am 16 Dez. 2019
Bearbeitet: Stephen23 am 16 Dez. 2019
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 Kommentare
Stephen23
Stephen23 am 16 Dez. 2019
"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 am 16 Dez. 2019
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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 16 Dez. 2019
Bearbeitet: Stephen23 am 16 Dez. 2019
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

Weitere Antworten (0)

Kategorien

Mehr zu Cell Arrays finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by