Как удалить строку в нескольких файлах с помощью функции eraseBetween (Matlab R2019a) - PullRequest
0 голосов
/ 22 мая 2019

Я безуспешно пытаюсь удалить определенную строку (все, что находится между xmln = и следующим пробелом) в нескольких текстовых файлах (xml-файлах) с помощью функции Matlab eraseBetween. Затем файлы будут перемещены в новую папку. Код до сих пор ниже. Любая помощь приветствуется.


modified_xml = fullfile(pwd, 'modified_xml')    
if exist([pwd '\modified_xml'])~=7              
    mkdir(modified_xml);                        
end
InputOldFiles = dir(fullfile('*.xml'));          
OldFilesNames = {InputOldFiles.name};            
for k = 1 : length(InputOldFiles)
    OldFiles = OldFilesNames{k};

    FID = fopen(OldFiles, 'r');
    if FID == -1, error('Cannot open file'), end

    % Delete specific string (everything between xmlns= and the next empty space)
    text = textscan(FID, '%s', 'delimiter', '\n', 'whitespace', '');
    new_text = eraseBetween(text,"xmlns="," ");
    NewFiles = fopen(OldFiles, 'w');
    if NewFiles == -1, error('Cannot open file'), end

    % Save the file 
    fprintf(NewFiles, '%s\n', new_text{:});
    fclose(NewFiles);

    % Copy the files
    copyfile(OldFiles, NewFiles);             
end


1 Ответ

0 голосов
/ 23 мая 2019

Вот как я это сделал:

% Little function to edit multiple XML files
% New files are copied into the Modified_XML_Files folder
% and original files are not overwritten

% Creation of a new folder
Modified_XML_Files = fullfile(pwd, 'Modified_XML_Files')
if exist([pwd '\Modified_XML_Files'])~=7
    mkdir(Modified_XML_Files);
end

% Copy XML files and move to new folder
copyfile('*.xml', 'Modified_XML_Files')
cd Modified_XML_Files

% List of XML files to modify
XML_Files = dir(fullfile('*.xml'));
XML_Files_Names = {XML_Files.name};

% Loop and delete text between xmlns= and the next space inclusively
for k = 1 : length(XML_Files)
    Old_File = XML_Files_Names{k};
    file_text = textread(Old_File, '%s', 'delimiter', '\n', 'whitespace', '');
    file_text = eraseBetween(file_text, "xmlns=", " ", 'Boundaries', 'inclusive');
    New_File = fopen(Old_File, 'w');

    for i=1:length(file_text)
        fprintf(New_File, '%s\n', file_text{i});
    end

    New_File = fclose(New_File);
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...