Editing/Changing a text file's content based on input variable
2 次查看(过去 30 天)
显示 更早的评论
I have a txt file which has the following content in the middle of the text:
set TC_SYS_01 0
set TC_SYS_02 0
...
set TC_SYS_38 0
Now if input is 10,the first 10 lines value has to be set to 1. example:=
set TC_SYS_01 1
...
set TC_SYS_10 1
----------------------------------- Updated Code------------------------------
% if input says 10
content = fileread('run.txt');
newcontent = regexprep(content, '(?<=set TC_SYS_\d*\s+)[01]','0');
% the above line is just to make sure all of them are 0,if any of them are 1;
fid = fopen('run.txt','w');
fwrite(fid,newcontent);
fclose(fid);
% now all lines are value is 0.
% Variable is 10,so first 10 to be set to 1
content = fileread('run.txt');
%%%%%%%%%%%%%%%%%
newcontent = regexprep(content, '(?<=set TC_SYS_[0]\d\s+)[01]','1'); %this line
%%%%%%%%%%%%%%%%%
fid = fopen('run.txt','w');
fwrite(fid,newcontent);
fclose(fid);
how to write the line with comment 'this line' so that i can directly write the variable into expression instead of hard coding as i have done in the above code ?
This question is in some ways related to my previous question: http://in.mathworks.com/matlabcentral/answers/248317-change-the-content-in-an-m-file-based-on-check-box-input-from-gui
0 个评论
采纳的回答
Thorsten
2015-10-14
编辑:Thorsten
2015-10-14
The idea is that you run the regexpr N times using the 'once' parameter. And you don't need so save the file intermediately after you have converted all the numbers to 0.
function changeTC_SYS(filename, N)
% Sets <num> to 1 in the first N lines of format "set TC_SYS_10 <num>".
content = fileread(filename);
content = regexprep(content, '(?<=set TC_SYS_\d*\s+)[01]','0');
% the above line is just to make sure all of them are 0,if any of them are 1;
for i = 1:N
content = regexprep(content, '(?<=set TC_SYS_\d*\s+)0', '1', 'once');
end
fid = fopen(filename,'w');
fwrite(fid,content);
fclose(fid);
0 个评论
更多回答(1 个)
Stephen23
2015-10-14
编辑:Stephen23
2015-10-14
Try this code:
N = 5; % <- how many line to change to '1'.
S = fileread('run.txt');
S = regexprep(S, '1\s*?$','0','lineanchors');
for k = 1:N
S = regexprep(S, '0\s*?$','1','lineanchors','once');
end
fid = fopen('new.txt','w');
fwrite(fid,S);
fclose(fid);
Which creates a text file new.txt that looks like this:
set TC_SYS_01 1
set TC_SYS_02 1
set TC_SYS_03 1
set TC_SYS_04 1
set TC_SYS_05 1
set TC_SYS_06 0
set TC_SYS_07 0
set TC_SYS_08 0
set TC_SYS_09 0
set TC_SYS_10 0
... etc
3 个评论
Stephen23
2015-10-16
"This works only if there are no other lines than.." which is exactly what was specified in the question. If there are other lines in the file then I am sure that the OP would know this and realize that this important information should be described in their question.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Text Data Preparation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!