for loop on all the lines of text
Show older comments
Hello, I have the following script,
%C = readlines('TARGETOLD.txt');
C=readlines('TARGETOLD.txt');
str=char(C);
raw_data = textscan(str,'%[^\n]');
DATA=raw_data{1, 1};
Nrow=numel(DATA);
for i=1:Nrow
idx = find(contains(C,';TIME_ELAPSED:'), 1);
%A=convertStringsToChars(C(1:idx));
%writelines('_modified.txt', A);
fid = fopen('_modified.txt','w');
fprintf(fid,'%s\n',C{1:idx});
D = readlines('HeadScript.txt');
fprintf(fid,'%s\n',D);
%E = readlines('HeadScript.txt');
%fprintf(fid,'%s\n',E);
F = readlines('BottomScript.txt');
fprintf(fid,'%s\n',F);
end
in particular I would like some advice regarding the rows
for i=1:Nrow
idx = find(contains(C,';TIME_ELAPSED:'), 1);
...
end
using idx I go to recognize the string "TIME_ELAPSED" only the first time I encounter it, while I would like to recognize it several times since it appears several times in the text file. as you can see, I thought to insert a for loop on all the number of lines (Nrow) and to make idx depend on the index i, but it doesn't work!
thank you for the advice
Answers (2)
No loop needed, at least initially...
C=readlines('TARGETOLD.txt');
idx=contains(C,';TIME_ELAPSED:');
E=C(idx);
Now, what do you want/need to do with those records?
More than likely if you would provide a sample of the input data file and explain your overall objective someone can provide a much more elegant solution than reading the file in as the string array...
6 Comments
Federico Paolucci
on 29 Oct 2022
dpb
on 29 Oct 2022
Well, of course E contains only the lines containing the looked-for string -- that's what you're initial question said you were looking for, so that's what you got. :)
As said, if we had an example of the content of the ORIGINAL "targetold.txt" file to look at and then a description of what to do with it, then we would have a chance of solving the actual problem.
Without the original, the description given makes no sense at all...we don't know what all those other things are nor in what form they're contained in the file.
Make a small(ish) example file that illustrates to it is possible to examine and provide what the output for the specific file should be is the simplest way to get other folks who don't "know nuthink!" about what your objective is. The size of the example file has no bearing on the logic as long as it is representative of the whole file.
Federico Paolucci
on 30 Oct 2022
dpb
on 30 Oct 2022
"mmediately after this string, my intent is to insert the contents of the "HeadScript" and "BottomScript" files."
You mean that literally? Then those two might as well be one file if they are inserted together...there isn't anything between the two?
Federico
on 30 Oct 2022
Yes I mean that literally, there's nothing between them
fidI=fopen('TARGETOLD.txt'); % Input file
fidO=fopen('_modified.txt','w'); % Output file
fid=fopen('HeadScript.txt'); % header file
HDR=fread(fid,'*char'); % suck up the header
fid=fclose(fid);
fid=fopen('BottomScript.txt'); % ditto for the trailer
TLR=fread(fid,'*char');
fid=fclose(fid);
% now do the work...
while ~feof(fidI)
l=fgets(fidI); % read a line
fwrite(fidO,l); % and put in output
if contains(l,';TIME_ELAPSED:') % the magic phrase
fwrite(fidO,HDR); % add the new stuff
fwrite(fidO,TLR);
end
end
fclose all
clear fid*
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!