Замените wordA на wordB в текстовом формате и сохраните его в новом файлеMATLAB - PullRequest
2 голосов
/ 15 ноября 2010

Как я мог бы написать функцию для следующего: filename: (строка, соответствующая имени файла) wordA и wordB: обе строки без пробелов

Функция должна сделать это: A- прочитайте текстовый файл построчно B- заменить каждое вхождение слова A на слово B. C- Напишите измененный текстовый файл, такой же, как исходный файл, но с добавлением 'new_'. Например, если имя входного файла было «data.txt», выводом будет «new_data.txt».

Вот что я сделал. В ней так много ошибок, но я понял основную идею. Не могли бы вы помочь найти мою ошибку и заставить функцию работать.

function [ ] = replaceStr( filename,wordA, wordB )
% to replace wordA to wordB in a txt and then save it in a new file.

newfile=['new_',filename]
fh=fopen(filename, 'r')
fh1=fgets(fh)
fh2=fopen(newfile,'w')
line=''
while ischar(line)
    line=fgetl(fh)
    newLine=[]
while ~isempty(line)
    [word line]= strtok(line, ' ')
if strcmp(wordA,wordB)
word=wordB
      end
newLine=[ newLine word '']
end
newLine=[]
fprintf('fh2,newLine')
end

fclose(fh)
fclose(fh2)

end

Ответы [ 2 ]

4 голосов
/ 15 ноября 2010

Вы можете прочитать весь файл в строке, используя функцию FILEREAD (внизу она вызывает FOPEN / FREAD / FCLOSE), заменить текст, а затем сразу сохранить все в файл, используя FWRITE. .

str = fileread(filename);               %# read contents of file into string
str = strrep(str, wordA, wordB);        %# Replace wordA with wordB

fid = fopen(['new_' filename], 'w');
fwrite(fid, str, '*char');              %# write characters (bytes)
fclose(fid);
1 голос
/ 15 ноября 2010

Некоторые вещи, которые нужно исправить:

  • Будет гораздо проще использовать функцию STRREP вместо самостоятельного анализа текста.
  • Я бы использовал FGETS вместо FGETL , чтобы сохранить символ новой строки как часть строки, поскольку вы все равно захотите вывести их в новый файл.
  • Формат вашего оператора FPRINTF неверен.

Вот исправленная версия вашего кода с вышеуказанными исправлениями:

fidInFile = fopen(filename,'r');            %# Open input file for reading
fidOutFile = fopen(['new_' filename],'w');  %# Open output file for writing
nextLine = fgets(fidInFile);                %# Get the first line of input
while nextLine >= 0                         %# Loop until getting -1 (end of file)
  nextLine = strrep(nextLine,wordA,wordB);  %# Replace wordA with wordB
  fprintf(fidOutFile,'%s',nextLine);        %# Write the line to the output file
  nextLine = fgets(fidInFile);              %# Get the next line of input
end
fclose(fidInFile);                          %# Close the input file
fclose(fidOutFile);                         %# Close the output file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...