我有几个.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);
答案 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
可能会失败。一种非常类似的方法是使用fread
和fwrite
直接连接文件内容,而不以任何方式解释它们。
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的答案所做的所有检查,但他们是个好主意。