我想知道如何使用MATLAB比较两个文件(逐行)(* .xml, .m, .txt,...等)。
file1 = 'toto.xml';
file2 = 'titi.xml';
我正在寻找一个MATLAB函数(通过命令行),它返回true / false或diff列表。
答案 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个单元格数组lines1
和lines2
。您可以将整个数组与
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]);