我想知道如何使用MATLAB比較兩個文件(逐行)(* .xml,.m, .txt,...等)。使用MATLAB比較文件
file1 = 'toto.xml';
file2 = 'titi.xml';
我正在尋找一個MATLAB功能(通過命令行)返回我真/假或區分的名單。
我想知道如何使用MATLAB比較兩個文件(逐行)(* .xml,.m, .txt,...等)。使用MATLAB比較文件
file1 = 'toto.xml';
file2 = 'titi.xml';
我正在尋找一個MATLAB功能(通過命令行)返回我真/假或區分的名單。
您可以使用MATLAB的系統命令FC如果你是在Windows中:
file_name_1 = 'file1.txt';
file_name_2 = 'file2.txt';
[status,result] = system(['fc ' file_name_1 ' ' file_name_2]);
這裏狀態會如果文件相等則爲0,否則爲1。此外結果將有不同的結果,如果文件不同。
對於其他操作系統,您可以在Unix的使用類似的命令,例如CMP代替FC的。
UPDATE:
對於跨平臺的兼容性,可以嘗試以下方法:
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)
首先,你可以通過閱讀行兩個文件:
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中(各自獨立地順序)存在從file2的線可以這樣做:
[idx1 idx2] = ismember(lines1,lines2);
idx2(idx2==0) = [];
idx1
將爲表示file1中具有file2中同一行線邏輯索引。 idx2
將是位於file2中的那些行的數字(位置)索引(第一次出現)。
如果行數是相同的:
idx_same_lines = strcmp(lines1,lines2);
首先更改文本文件的字符串,然後使用MATLAB的strcmp功能。
text1 = fileread('test.txt');
text2 = fileread('testcp.txt');
strcmp(text1, text2)
如果你有一個文件(或路徑)與空間(如C:\我的文件夾\ 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]);
+1。 'cmp'進行逐字節比較;你想在Unix上使用'diff'來進行行比較。 – 2012-02-16 22:32:27
@upperBound:它是shell命令嗎?所以它可以在所有操作系統下運行? – lola 2012-02-17 08:08:51
這是一個shell命令。 「fc」是Windows特定的。正如Andrew指出的那樣,Unix使用「diff」。 – upperBound 2012-02-17 15:08:15