Filter löschen
Filter löschen

Character restriction in text file

2 Ansichten (letzte 30 Tage)
jgillis16
jgillis16 am 10 Aug. 2015
Bearbeitet: Cedric am 10 Aug. 2015
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 Kommentare
Star Strider
Star Strider am 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
jgillis16 am 10 Aug. 2015
keep those lines, discard the rest that don't have 'M' in the first column.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 10 Aug. 2015
LIdx = (str2double(Glxcr(:,2))<=1813.1) & ~cellfun(@isempty, regexp(Glxcr(:,1),'^M$'))
If the column only needs to start with 'M' but can contain other characters, use '^M' . If the column only needs to have 'M' somewhere in it, use 'M'

Weitere Antworten (1)

Cedric
Cedric am 10 Aug. 2015
Bearbeitet: Cedric am 10 Aug. 2015
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' )

Kategorien

Mehr zu Low-Level File I/O finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by