MATLAB Answers

how to search and delete the nth ocurance of a text in a text file

Hallo,
I have a text file 'test.txt' . The contents of test file is as follows.
Tim is Home
John is happy
Sara is funny
Kevin is at work
John is happy
Cat and Dog
I want to open the test.txt file and delete the 'nth' occurance of 'John is happy '. I have attached the text file too. Thanks in advance.
eg. I want to delete the line with ' n th 'occurance.
so It can be 1st occurance
or 2nd Occurance.. etc
Regards,
Jaffrey

  0 Comments

Sign in to comment.

Products


Release

R2015b

3 Answers

Answer by madhan ravi
on 17 Jul 2019
 Accepted Answer

s = fileread('test.txt');
v = regexp(s,'\n','split');
z = regexprep(s,'John is happy','',2) % 2 denotes the nth occurence
dlmwrite('sample.txt',z,'delimiter','')

  4 Comments

Show 1 older comment
Adam Danz , he knows it ;)
Is that hunch from your crystal ball? :D

Sign in to comment.


Answer by Adam Danz
on 17 Jul 2019
Edited by Adam Danz
on 17 Jul 2019

The question is unclear whether the goal is to remove the 2nd line of text or to remove the line(s) with "John is happy". The block below shows both interpretations.
% Import text
opts = delimitedTextImportOptions("NumVariables", 1);
opts.VariableNames = "txt";
test = readtable("C:\Users\adanz\Documents\MATLAB\savehere\matlabCentralDocs_trash\test.txt", opts);
test = table2array(test);
% Delete 2nd line
test(2) = [];
% - OR -
% Delete lines that match "John is happy"
idx = strcmpi(test, 'John is happy');
test(idx) = [];
% - OR -
% delete nth occurance of "John is happy"
n = 2;
idx = strcmpi(test, 'John is happy');
test(max(find(idx,n))) = [];
% Write to txt file
fid = fopen('test2.txt','wt');
fprintf(fid,'%s\n',test{:});
fclose(fid);

  3 Comments

Thank you for the reply.
My question is to remove the line with 'nth' occurance of 'John is happy'.
eg. I want to delete the line with ' n th 'occurance.
so It can be 1st occurance
or 2nd Occurance.. etc
OK, see updated answer.

Sign in to comment.