change values in a text file, save it and run it with an executable

4 views (last 30 days)
Hello all!
I've got a text file that contains all the necessary parameters (80 in total) that I need in order to run it with an executable that I have.
I need to start a sensitivity analysis for one parameter of my text file, one at a time.
For example , in my txt file, I've got:
comments... comments... parameter A = [5 5 5 5] comments...
I want to change the values of parameter A, from 1 to 100, but each time, after every change of the parameter, I want to save the output of the text file, in order to run it with my executable file.
In simpler words, I want to open the txt file, change the parameter value,close the txt file, run it with the .exe file and save the output. And I want to do this 100 times.
Please help!
  1 Comment
Fangjun Jiang
Fangjun Jiang on 31 Aug 2011
You need to provide an example of your text file, especially how to identify and locate the parameter A. Basically you need to provide the text file to your .exe 100 times. Each time, the value of parameter is changed, right?

Sign in to comment.

Answers (1)

Christina
Christina on 16 Sep 2011
My text file looks like:
comments.......
comments.......
5, 5, 5, 5, ! parameter A
That line (with the parameter A) is located at number 188.
So, the code that I've written in order to locate it is:
%Define the range of the parameter A
%Assume that A can vary between 0.01 and 0.05
A_range = 0.01:0.01:0.05;
%The loop counter
for i=1:length(A_range)
%Extract each value from the range of the A_range
param1 = A_range(i)
%Replicate each of these values 4 times and create the new
%parameter set
A = repmat(param1,1,4)
%Open the jin file and scan through it
fid = fopen('....THE NAME OF MY TEXT FILE.txt);
C = textscan(fid,'%s','delimiter','\n');
% Find the line no 188
line188 = C{1}{188}
and this code is going to give me:
0.05 0.05 0.05 0.05 ! parameter A
The problem is that I need to change these values in the text (which should be formatted as strings), but because I need to loop lots of times for a big range of samples, I need to change these values as numbers in my code.
  3 Comments
Christina
Christina on 16 Sep 2011
Thanks!
however, this is giving me
b = [5]
I need to substitute the values of: 5 5 5 5
with 0.01 0.01 0.01 0.01
0.02 0.02 0.02 0.02
0.03 0.03 0.03 0.03
and so on.
I also tried strrep, but it is not helpful for my case, because I've got thousands of loops.
Fangjun Jiang
Fangjun Jiang on 16 Sep 2011
Assume line188 is correct, textscan() should give the correct value. Then you need to wrap this in your for-loop.
line188='0.05 0.05 0.05 0.05 ! parameter A';
b=textscan(line188,'%f');
b=b{1}
b =
0.0500
0.0500
0.0500
0.0500

Sign in to comment.

Categories

Find more on Data Import and Export in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!