Сравнить файлы с MATLAB - PullRequest
       3

Сравнить файлы с MATLAB

2 голосов
/ 16 февраля 2012

Я хотел бы знать, как можно сравнить два файла (строка за строкой) (* .xml, .m, .txt, ... и т. Д.), Используя MATLAB.

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

Я ищу функцию MATLAB (в командной строке), которая возвращает мне true / false или список diff.

Ответы [ 5 ]

6 голосов
/ 17 февраля 2012

Вы можете использовать команду system MATLAB с fc , если вы находитесь в Windows:

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

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

Здесь status будет 0, если файлы равны, и 1, если нет. Кроме того, result будет иметь результат diff, если файлы различаются.

Для других операционных систем вы можете использовать аналогичные команды, такие как cmp в Unix вместо 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)
1 голос
/ 16 августа 2014

сначала измените текстовый файл на строку, затем используйте функцию strcmp в matlab.

text1 = fileread('test.txt');
text2 = fileread('testcp.txt');
strcmp(text1, text2)
1 голос
/ 16 февраля 2012

AFAIK, единственный дифференцирующий инструмент в MATLAB - это visdiff, который не возвращает никакой информации, но отображает окно с обоими файлами рядом и выделяет разные строки.

0 голосов
/ 11 ноября 2014

Если у вас есть файл (или путь) с пробелами (например, 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]);
0 голосов
/ 16 февраля 2012

Сначала вы можете прочитать оба файла по строкам:

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);

Сравнение строк не так очевидно и зависит от ваших потребностей. Что вы хотите сделать, если количество строк отличается? Например, чтобы найти, какие строки из file2 существуют в file1 (независимо от порядка), вы можете сделать:

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

idx1 будет логическим индексом, представляющим строки в файле1, которые имеют одинаковые строки в файле2. idx2 будет числовым (позиционным) указателем того, где находятся эти строки в файле2 (первое вхождение).

Если количество строк одинаковое:

idx_same_lines = strcmp(lines1,lines2);
...