将一个文件的内容附加到另一个文件而不会丢失格式

时间:2018-05-25 12:16:54

标签: matlab file-io

我有几个.txt格式的文件。我的目标是将所有这些文件的内容统一为源文件(也是.txt格式),而不更改格式。首先,我只想将内容从一个文件复制到另一个文件。

以下代码片段允许复制内容。但是,我丢失了格式。

%   load destination file in append mode
destFileId = fopen(destFile, "a");
%   load source file in read mode
sourceFileId = fopen(sourceFile, "r");

%   Extract content from source file
content = textscan(sourceFileId, '%c');

%   Append content into destination file
fprintf(destFileId, content{:});

%   Close both files
fclose(destFileId);
fclose(sourceFileId);

2 个答案:

答案 0 :(得分:4)

我认为使用fileread代替textscan将有助于保留格式化(fileread将整个文件内容读取为一个简单的matlab字符串,同时保留空格和换行符)

这是一些伪代码(未经测试):

 function [] = Dummy(desFile, sourcesFiles)
 %[
    % Open destination file for writing (discarding previous content)
    [destFileId, msg] = fopen(destFile, 'w');
    if (desFileId < 0), error(msg); end

    % Make sure to close file on any error, ctrl+c (and normal termination of course)
    cuo = onCleanup(@()fclose(destFileId));

    % Copy file contents to destination
    count = length(sourcesFiles);
    for fi = 1:count,

        text = fileread(sourcesFiles{fi});
        fprintf(destFileId, '%s', text);

    end
 %]     

答案 1 :(得分:1)

使用fprintf连接文件的问题是,如果文件包含特殊字符(例如\%),那么fprintf可能会失败。一种非常类似的方法是使用freadfwrite直接连接文件内容,而不以任何方式解释它们。

function catfiles(dest, sources)
    fdest = fopen(dest, 'wb');

    for source = 1:numel(sources)
        fsource = fopen(source,'rb');
        source_data = fread(fsource);
        fwrite(fdest, source_data);
        fclose(fsource);
    end

    fclose(fdest);

用法

>> catfiles('dest.txt', {'source1.txt', 'source2.txt'});

我没有包括@ CitizenInsane的答案所做的所有检查,但他们是个好主意。