how to compare two text file and sort the lines of one of them with respect of another one ?

조회 수: 1 (최근 30일)
I have a text file which has 6 3d coordinates (6 lines 3 columns) (as a reference file). I have to measure these points again and save them in another text file. later i need both text file by correct sorting.
The problem is that sometimes some points cannot be measured. in this case the discipline points will be destroyed. and also one or two or 3 points less.
Question is;
- how can I change the discipline of the first file (reference file) as well as the second file (measured file)? that means points 1 should be in the same line in both files (no matter which) and points that are not measured e.g. Point 2 should also be deleted from the reference file. these are my two files below:
measured: (points 2 and 4 could not be measured)
1.006253e + 03 9.822302e + 02 1.161773e + 01
1.006552e + 03 9.987608e + 02 1.161969e + 01
9.946106e + 02 1.012398e + 03 1.161471e + 01
9.989777e + 02 9.972292e + 02 1.161314e + 01
reference file:
1006.249 982.228 11.618
1010.194 984.407 11.617
1006.546 998 761 11 620
1002.063 1012.767 11.614
994,606 1012,399 11,616
998,971 997,229 11,614
thank you for your help.
  댓글 수: 2
Guillaume
Guillaume 2020년 2월 12일
It's fairly simple to do, use ismember or more likely ismembertol to find which rows of the reference file are in the measurement file (of course, after having imported both files with dlmread for example).
However, note that the values in your example files are not exactly identical, therefore what tolerance do you want to use for two different numbers to be considered equal?
MoHa
MoHa 2020년 2월 13일
Hi Guillaume,
thanks für your answer. in every measurement the tolerance could be to one cm in (xyz).

댓글을 달려면 로그인하십시오.

채택된 답변

Guillaume
Guillaume 2020년 2월 13일
편집: Guillaume 2020년 2월 13일
So, it will go something like this:](
%read the files. Not enough details given to give exact syntax. Something like this should work:
measurement = dlmread('C:\somewhere\measurementfile');
reference = dlmread('C:\somewhere\referencefile');
%find which rows of reference are within the range of the rows of measurement, and keep only these
rowstokeep = ismembertol(reference, measurement, 1, 'ByRows', true, 'DataScale', 1);
newreference = reference(rowstokeep, :);
%save into new file
dlmwrite('C:\somewhere\newreferencefile', newreference);
You may have to play around with the tol input of ismembertol (3rd input) and the DataScale input (if you want absolute tolerances, if you want relative tolerances, get rid of DataScale).
  댓글 수: 3
Guillaume
Guillaume 2020년 2월 13일
Oops, I completely forgot to write the 'ByRows', true option of ismember. I've fixed the code now. rowstokeep will now be a 6x1 logical array indicating which rows of reference match rows of measurement.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Environment and Settings에 대해 자세히 알아보기

제품


릴리스

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by