How can I create a 2-term, 1-by-1 string using sprintf?

I am using the following code to refer to 4000x15 doubles I have in my workspace, they are named P1-17. When I use the code however, the name becomes a 1x2 char and therefore a variable itself. When I try to use it in the function that's in the loop, it does not refer to the 4000x15 data at all.
Does anyone know how to fix this or do it in another way? I have tried a lot of things but I can't figure this one out.
for j = 1:1:17
filename = (sprintf('%s%d','P',j)) ;
[sgmean] = DataPrep(filename) ;
end

3 Commenti

Acessing variable names dynamically is one way that beginners force themselves into writing slow, complex, inefficient, obfuscated, buggy code that is hard to debug. Read this to know some reasons why:
I doubt that you wrote all of those variable names by hand, so the most important question is: how did you get all of those variables into the workspace? My guess is that you imported them somehow, in which case that would be the correct place to fix this badly-designed data. For example, you should always LOAD into an output variable:
S = load(..)
"but use one of the alternatives in the documentation you attached?"
You don't need to guess, I already told you which alternative to use: LOAD into an output variable.
@Stephen23 Thank you so much! I am now loading the files into a struct using the code below, but the dimensions of the struct are not cooperating. After one run I get the error 'Subscripted assignment between dissimilar structures.', because only one field is created within a 17x1 struct. I want 17 fields in a 1x1 struct.. Do you have an idea on what I'm doing wrong now??
parts = {'P1.mat', 'P2.mat', 'P3.mat', 'P4.mat', 'P5.mat', 'P6.mat', 'P7.mat', 'P8.mat', 'P9.mat', 'P10.mat', 'P11.mat', 'P12.mat', 'P13.mat', 'P14.mat', 'P15.mat', 'P16.mat', 'P17.mat'} ;
for m = numel(parts):-1:1
S(m,1) = load(parts{m}) ;
end

Accedi per commentare.

 Risposta accettata

Stephen23
Stephen23 il 9 Mag 2022
Modificato: Stephen23 il 9 Mag 2022
Here is a way to import those badly-named variables, assuming exactly one variable per MAT file:
N = 17;
C = cell(1,N);
for kk = 1:N
F = sprintf('P%d',kk);
C(kk) = struct2cell(load(F));
end
Your data are stored in the cell array C, for example the 2nd file:
C{2}
The code would be simpler and more robust if the variable names were exactly the same in every file.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Prodotti

Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by