用MATLAB比较文件

时间:2012-02-16 17:19:57

标签: matlab compare text-files

我想知道如何使用MATLAB比较两个文件(逐行)(* .xml, .m, .txt,...等)。

file1 = 'toto.xml';
file2 = 'titi.xml';

我正在寻找一个MATLAB函数(通过命令行),它返回true / false或diff列表。

5 个答案:

答案 0 :(得分:6)

如果你在Windows中,你可以使用MATLAB的系统命令和 fc

file_name_1 = 'file1.txt';
file_name_2 = 'file2.txt';

[status,result] = system(['fc ' file_name_1 ' ' file_name_2]);

如果文件相等, status 将为0,否则为1。此外,如果文件不同, result 将具有差异结果。

对于其他操作系统,您可以在Unix中使用类似命令,例如 cmp ,而不是 fc

<强>更新

对于跨平台兼容性,您可以尝试以下方法:

file_1 = javaObject('java.io.File', 'file1.txt');
file_2 = javaObject('java.io.File', 'file2.txt');
is_equal = javaMethod('contentEquals','org.apache.commons.io.FileUtils',...
                      file_1, file_2)

答案 1 :(得分:1)

AFAIK是MATLAB中唯一的差异工具visdiff,它不会返回任何信息,但会同时显示一个窗口,其中包含两个文件并突出显示不同的行。

答案 2 :(得分:1)

首先将文本文件更改为string,然后使用matlab的strcmp函数。

text1 = fileread('test.txt');
text2 = fileread('testcp.txt');
strcmp(text1, text2)

答案 3 :(得分:0)

首先,您可以按行读取这两个文件:

fid1 = fopen(file1, 'r');
fid2 = fopen(file2, 'r');

lines1 = textscan(fid1,'%s','delimiter','\n');
lines2 = textscan(fid2,'%s','delimiter','\n');
lines1 = lines1{1};
lines2 = lines2{1};


fclose(fid1);
fclose(fid2);

您将拥有2个单元格数组lines1lines2。您可以将整个数组与

进行比较
tf = isequal(lines1,lines2);

比较线条不是那么明显,取决于您的需要。如果行数不同,您想要做什么?例如,要查找file1中存在哪些行(不依赖于顺序),您可以执行以下操作:

[idx1 idx2] = ismember(lines1,lines2);
idx2(idx2==0) = [];

idx1将是逻辑索引,表示file1中在file2中具有相同行的行。 idx2将是这些行位于file2(第一次出现)的位置的数字(位置)索引。

如果行数相同:

idx_same_lines = strcmp(lines1,lines2);

答案 4 :(得分:0)

如果您有一个带空格的文件(或路径)(例如 c:\ my folder \ myfile.m ),请在DOS中用引号(“)包装文件名请注意,仍然需要撇号:

file_name_1 = 'file 1.txt';
file_name_2 = 'file 2.txt';

[status,result] = system(['fc ', '"', file_name_1, '" "', file_name_2, '"']);

或者,您可以在定义文件名的变量后立即加上引号:

file_name_1 = '"file 1.txt"';
file_name_2 = '"file 2.txt"';

[status,result] = system(['fc ' file_name_1 ' ' file_name_2]);