Removing specific lines from a .txt file.
3 views (last 30 days)
Show older comments
I have a .txt file that I have imported into MATLAB and I need to remove some specific lines. Currently, I have simplified it to what I have shown below:
Trace = 'D:\trace.txt';
%Simplify trace file into time and status matrix
str = fileread(Trace);
trace = regexp(str, '^(\d+\.?\d*):[^:]+:\s+([^\n\r,]+)','tokens','lineanchors');
trace = vertcat(trace{:});
%Simplify trace file to display only desired keywords
trace(strcmp(trace(:,2), 'init-hold'),:) = [];
trace(strcmp(trace(:,2), 'start'),:) = [];
trace(strcmp(trace(:,2), 'vent-check'),:) = [];
trace(strcmp(trace(:,2), 'flush'),:) = [];
trace(strcmp(trace(:,2), 'flush-evac'),:) = [];
trace(strcmp(trace(:,2), 'flush-vent'),:) = [];
trace(strcmp(trace(:,2), 'init-evac'),:) = [];
trace(strcmp(trace(:,2), 'leak-test-end'),:) = [];
trace(strcmp(trace(:,2), 'pre-leak-test'),:) = [];
trace(strcmp(trace(:,2), 'leak-test'),:) = [];
trace(strcmp(trace(:,2), 'pre-ramp'),:) = [];
trace(strcmp(trace(:,2), 'ramp'),:) = [];
trace(strcmp(trace(:,2), 'evac'),:) = [];
trace(strcmp(trace(:,2), 'vent'),:) = [];
trace(strcmp(trace(:,2), 'done'),:) = [];
trace(strcmp(trace(:,2), 'end-vent'),:) = []
Where I end up with the following result:
{'14667.4' } {'hold' }
{'18267.4' } {'hold-end' }
{'18456.4' } {'hold' }
{'22056.4' } {'hold-end' }
{'22245.6' } {'hold' }
{'25845.6000001'} {'max-pressure-evac 60.0'}
{'26034.6000001'} {'max-pressure-evac 60.0'}
{'29634.6000001'} {'hold-end' }
{'29823.6000001'} {'hold' }
{'31332.4000001'} {'hold-end' }
{'32785.4000001'} {'hold' }
{'33423.6000001'} {'hold-end' }
I want my code to be able to recognize when a 'max-pressure-evac 60.0' follows a 'hold' and then to remove only the lines between that initial 'hold' and the next 'hold-end'. For the above example I would want the following output:
{'14667.4' } {'hold' }
{'18267.4' } {'hold-end' }
{'18456.4' } {'hold' }
{'22056.4' } {'hold-end' }
{'29823.6000001'} {'hold' }
{'31332.4000001'} {'hold-end' }
{'32785.4000001'} {'hold' }
{'33423.6000001'} {'hold-end' }
Where the four lines corresponding to the 22245.6-29634.6000001 timestamps have been removed but everything else was kept. Any help would be greatly appreciated! I have attached an example .txt file for reference.
0 Comments
Answers (1)
Mitch Lautigar
on 9 May 2022
As you read this in, you really just need to add in a conditional flag. Specifically, if a "hold" is seen, set a hold_flag to be true (you can use setappdata/getappdata to move flags around like a global variable without it actually being a global value) you do not record any lines into your new array. If the hold_flag is false, then you record normally.
0 Comments
See Also
Categories
Find more on Detection, Range and Doppler Estimation 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!