2015-03-05 2 views
0

Привет У меня есть текстовый файл, который имеетКак заменить определенные слова в текстовом файле на «*»?

Treadstone project 

    Jason Bourne is to neutralize Wombosi. 

    Nicky Parsons is the technician on the job 

    Bourne has shown interest in Marie Kreutz 

    Do not leak information about Blackbriar. 

У меня есть массив ячеек с

words = {'treadstone','bourne','wombosi','parsons','blackbriar'} 

Я полагаю, чтобы получить эту

********** project 

Jason ****** is to neutralize *******. 

Nicky ******* is the technician on the job 

****** has shown interest in Marie Kreutz 

Do not leak information about **********. 

Но мой код печатает этот

********** project 

Jason ****** is to neutralize Wombosi 

Jason bourne is to neutralize *******. 

Nicky ******* is the technician on the job 

****** has shown interest in Marie Kreutz 

Do not leak information about **********. 

Это мой код:

while ischar(line) 
if strcmp(line, '') 
    fprintf(output, line); 
    line = fgetl(fh); 
end 
[T N] = size(words); 
for i = 1:N 
    mat = words{i}; %extreact the first word to comapre it to the text file 
    if strfind(lower(line), mat) 
     t = mat; 
     t(1:end) = '*'; %replace the word with * 
     ht = strfind(lower(line), mat); %find its location 
     hat = lower(line(ht)); 
     line(ht) = hat; %replace the word with lower case 
     lalu = strrep(line, mat, t); 

     fprintf(output, '%s\n', lalu); 
    else 
     hat = 0; 
    end 


end 

line = fgetl(fh); 
end 

Любая помощь будет принята с благодарностью. Спасибо.

+0

Ваш вкус фильмов это превосходно. Все шутя в сторону, я напишу ответ. – rayryeng

+0

Вопрос. Вы целенаправленно смещены перед вашим текстом или являются символами '*' части исходного текста? Это очень запутанно. – rayryeng

+0

Я просто смел перед моим текстом, чтобы его было легко читать. Я не мог смело смотреть на некоторые из них, как на проект **********. –

ответ

2

Ваш код работает по большей части. Однако, если в одном предложении имеется несколько совпадающих строк, вы не обновляете это предложение, чтобы блокировать каждое слово. Вы только блокируете слова по отдельности и не обновляете все слова в одной строке. Вам также нужно будет поместить этот оператор fprintf за пределы внутреннего цикла, когда вы закончите. Помещая оператор fprintf внутри цикла for, вы должны написать строку, когда поиск определенной строки в предложении был успешным. Вы только хотите написать строку в текст, как только вы проверите для все слов - вот почему ваш текстовый файл повторяет определенные предложения. Это связано с тем, что в предложении есть несколько совпадающих строк.

Таким образом, сделать что-то вроде этого:

while ischar(line) 
if strcmp(line, '') 
    fprintf(output, line); 
    line = fgetl(fh); 
end 
[T N] = size(words); 
for i = 1:N 
    mat = lower(words{i}); %extreact the first word to comapre it to the text file 
          % Also cast to lower to ensure case-sensitive 
    if strfind(lower(line), mat) 
     t = mat; 
     t(1:end) = '*'; %replace the word with * 
     ht = strfind(lower(line), mat); %find its location 
     hat = lower(line(ht)); 
     line(ht) = hat; %replace the word with lower case 
     line = strrep(line, mat, t); %// UPDATE STRING HERE 
    else 
     hat = 0; 
    end   
end 

fprintf(output, '%s\n', line); %// Print out string once all replacing is done 

line = fgetl(fh); 
end 

я должен был сделать некоторые настройки перед тем, как ваш код для работы. Я поместил свой текст в файле с именем bourne.txt, то сделал это, прежде чем я побежал код:

fh = fopen('bourne.txt', 'r'); 
line = fgetl(fh); 
words = {'treadstone','bourne','wombosi','parsons','blackbriar'}; 
output = fopen('output.txt', 'w'); 

Я написал текст output.txt. Когда я использовал приведенный выше код и запустить исправленный код, я получил:

********** project 
Jason ****** is to neutralize *******. 
Nicky ******* is the technician on the job 
****** has shown interest in Marie Kreutz 
Do not leak information about **********. 

Теперь, когда мы успешно классифицировать текстовый файл, Джейсон Борн был бы горд:

+2

Ха-ха. Это замечательный ... Большое спасибо. –

+0

@JasonThapa - LOL не беспокоится. Удачи! – rayryeng

Смежные вопросы