フィルターのクリア

How do i create variables from strings for the purpose of writing different variables to text file.

1 回表示 (過去 30 日間)
I want to be able to do something like choose scenario a and get 5 text files with the numbers 1,2,3... 2,2,3... 3,2,3... 4,2,3... 5,2,3 and then with the same hardcode but in a new run choose the letter b and now produce 5 text files like 1,1,3... 1,2,3... 1,3,3... 1,4,3... 1,5,3. Any help on this matter is greatly appreciated. My not working attempt is shown below.
My thought process is to try to redefine a vraiable name by reading the string I enter, making a variable called that string (overwriting the predefined ones) and then trying to somehow make that the argument of the for loop.
a = 1
b = 2
c = 3
prompt = 'what would you like to sweep over\r\n'
sweepstr = input(prompt,'s')
sweep = genvarname(sweepstr)
for sweep = 1:1:5
filename = sprintf('test%s%i.txt',sweepstr,sweep);
circuitfile = fopen(filename,'w');
fprintf(circuitfile,' %i \r\n %i \r\n %i',a,b,c);
fclose(circuitfile);
end
Thanks in advance for all and any help
  1 件のコメント
Stephen23
Stephen23 2018 年 9 月 3 日
編集済み: Stephen23 2018 年 9 月 3 日
"My thought process is to try to redefine a vraiable name by reading the string I enter, making a variable called that string (overwriting the predefined ones) and then trying to somehow make that the argument of the for loop"
That would be a pointlessly difficult, slow, complex, buggy, and hard to debug way to try and solve this problem. Here is why this approach is not recommended:
A much simpler approach is to put the data into one small vector and use indexing. Then this task is trivial to solve, using neat and highly efficient indexing.

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2018 年 9 月 3 日
編集済み: Stephen23 2018 年 9 月 3 日
This is trivial when you put those values into one small vector. Then you can use indexing very simply:
V = [1,2,3];
S = input('var to sweep (1/2/3): ','s');
X = str2double(S);
for k = 1:5
V(X) = k;
fprintf('%d\n%d\n%d\n',V)
end
Tested:
>> temp0
var to sweep (1/2/3): 3
1
2
1
1
2
2
1
2
3
1
2
4
1
2
5
If you want to let the user select a name rather than an index, then just add strcmp, something like this:
S = input('var to sweep (a/b/c): ','s');
X = find(strcmp(S,{'a','b','c'}));
Tested:
>> temp1
var to sweep (a/b/c): c
1
2
1
1
2
2
1
2
3
1
2
4
1
2
5
  4 件のコメント
Thomas Dixon
Thomas Dixon 2018 年 9 月 3 日
This is great! As you have probably assumed the code has more than 3 variables and as you rightly assume this has got unwieldy very quickly which is where my problem started. I did use the case scenario but I am writing a large circuit file which as passed to a different program and then the output is analysed in MATLAB. It got too much when trying to make one alteration. I like the structure idea and will give it a go. Be ready for my next question. Many thanks :) Tom
Stephen23
Stephen23 2018 年 9 月 3 日
@Thomas Dixon: I hope that it helps. Structures are highly recommended for handling lots of parameters like this: they make them easy to access, to pass to/from functions, and intuitive to read/understand.
Questions are always welcome, that is why we are here!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by