Чтение файлов идет неправильно. Во-первых, используя '%d'
, вы читаете все числа как целые числа и, таким образом, теряете точность (все числа округляются до ближайшего целого числа).
Во-вторых, указанное вами число столбцов не соответствует количеству столбцов в любом файле, и, таким образом, textscan
не будет помещать данные в необходимые столбцы, а скорее создаст длинный вектор или матрицу другой формы / массив ячеек
Чтобы позволить Matlab считывать данные как данные с плавающей запятой (т. Е. Удваивается в Matlab), вы можете использовать '%f'
(см. Документ textscan
)
id = fopen('file_A.txt','r');
A = cell2mat(textscan(id,'%f %f %f %f %f %f %f','headerlines',1));
fclose(id);
id = fopen('file_B.txt','r');
B = cell2mat(textscan(id,'%f %f %f %f %f %f','headerlines',1));
fclose(id);
Наконец, ваш способ поиска нужных строк работает, но немного проще для чтения - функция ismember
. Это проверяет, находятся ли значения в B в A (только первый столбец, так как это ваш критерий выбора). Это возвращает логический массив, который имеет единицу на все индексы, где найдено членство. Используйте этот логический массив, чтобы выбрать правильные строки из A.
% solution, check if members of B are in A.
solution = A(ismember(A(:,1),B(:,1)),:)