Character restriction in text file
Show older comments
I am trying to restrict a text file by only keeping lines that contain 'M' in the first column.
I wrote the code below, except 'M' cannot be used in str2double. Would there be an alternative way to write this? Code below:
clear all
fidi = fopen('BTM.txt','rt');
Glxc = textscan(fidi, '%s', 'Delimiter','|');
frewind(fidi)
Glxcs = textscan(fidi, '%s', 'EndOfLine','\r\n');
fclose(fidi);
dlen = 2*fix(length(Glxc{:})/2); % Set Row Length
Glxcr = reshape(Glxc{:}(1:dlen), 2, [])'; % Reshape & Transpose
LIdx= (str2double(Glxcr(:,2))<=1813.1) & (str2double(Glxcr(:,1))='M')% Reshape & Transpose
NewGlxc = Glxcs{:}(LIdx,:); % Rows Of New Array
fido = fopen('vcc18M.txt','wt')
fprintf(fido, '%s\n', NewGlxc{:});
fclose(fido)
2 Comments
Star Strider
on 10 Aug 2015
‘... pulling lines that contain 'M' in the first column ...’
Does that mean that you want to keep those lines or discard them?
jgillis16
on 10 Aug 2015
Accepted Answer
More Answers (1)
If you want to keep only the lines which start with the character M, the following would work:
content = fileread( 'BTM.txt' ) ;
content = regexprep( content, '^[^M].*?$\s*', '', 'lineanchors' ) ;
And then you export keeping the original format:
fId = fopen( 'vcc18M.txt', 'w' ) ;
fwrite( fId, content ) ;
fclose( fId ) ;
PS: Will you ultimately want to separate lines like here? Were you able to make this one work by the way?
EDIT : Without knowing more about the content of the file, it is difficult to debug what you wrote, but if Glxcr(:,1) is truly indexing cells which contain elements of the first column of the file, then you probably want to replace
& (str2double(Glxcr(:,1))='M')
with
& strcmp( Glxcr(:,1), 'M' )
Categories
Find more on Environment and Settings 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!