So I currently have text files that look like this for example, but can go on for a lot longer:
14 2.649 5.000 93.5020 -61.9602 2.5000 90.5132 -64.4065 2.5000 88.3552 -67.5184 2.5000 87.8311 -70.6759 2.5000 88.0976 -74.0126 2.5000 90.2142 -75.7097 2.5000 92.9562 -77.3048 2.5000 95.6058 -75.8448 2.5000 98.5412 -74.1425 2.5000 99.7479 -70.8020 2.5000 100.8159 -67.0142 2.5000 100.0439 -63.0305 2.5000 98.6425 -58.8215 2.5000 95.7429 -55.5767 2.5000
#
14 2.040 5.000 -79.9068 55.3230 2.5000 -84.3332 53.5374 2.5000 -88.8590 51.4109 2.5000 -93.3437 49.3544 2.5000 -97.6597 47.7654 2.5000 -101.6949 47.0018 2.5000 -105.5733 47.2205 2.5000 -108.7795 48.8558 2.5000 -111.8250 51.5986 2.5000 -114.0240 55.1797 2.5000 -116.2758 59.4346 2.5000 -118.2519 63.7965 2.5000 -120.4604 68.1404 2.5000 -122.8527 71.9415 2.5000
and the goal is to make it so that the first set of numbers is reordered like this:
14.000000 2.649000 5.000000
93.502000 -61.960200 2.500000
90.513200 -64.406500 2.500000
88.355200 -67.518400 2.500000
87.831100 -70.675900 2.500000
88.097600 -74.012600 2.500000
90.214200 -75.709700 2.500000
92.956200 -77.304800 2.500000
95.605800 -75.844800 2.500000
98.541200 -74.142500 2.500000
99.747900 -70.802000 2.500000
100.815900 -67.014200 2.500000
100.043900 -63.030500 2.500000
98.642500 -58.821500 2.500000
95.742900 -55.576700 2.500000
and placed into a new text file, then have matlab read the '#' and open another new file to do the same thing with the second set of numbers.
Any help is appreciated, especially similar examples.

댓글 수: 2

It might help if you post one of the text files, or a subset of the file.
Zaid Khalil
Zaid Khalil 2021년 6월 19일
Here's one

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

 채택된 답변

Scott MacKenzie
Scott MacKenzie 2021년 6월 19일
편집: Scott MacKenzie 2021년 6월 19일

1 개 추천

This can probably be streamlined, but I think it achieves what you are looking for:
% read the test data into a 1x1 cell and convert to string array
fid = fopen('testdata.txt'); % data you posted
C = textscan(fid, '%s');
fclose(fid);
s = string(C{:});
% find indices of hash delimiters
idx = [0; find(strcmp(s(:), '#'))];
% pull data between delimiters, reshape, write to output file
k = 1;
for i=2:length(idx)
s1 = s(idx(i-1)+1:idx(i)-1);
s2 = reshape(s1,3,[])';
filename = sprintf('somefile%d.txt', k);
writematrix(s2,filename);
k = k+1;
end

댓글 수: 3

Zaid Khalil
Zaid Khalil 2021년 6월 19일
So for starters thank you for taking the time to help me out, and the code looks like it works great other than that I think its scrambling the coordinates a little bit and I'm not sure why. But other than that it splits them into their respective files perfectly just like I wanted it. Attached below is some of the output files I got so you can see what I mean by scrambled. For refrence, these are x-y-z coords and the '2.5' should always be the z coord. I also reattached the original file but with the first 3 numbers removed from each data set so you can see what I mean better.
Once again thank you a lot for your help and time
OK, yes. There was a bug in the reshaping. I just edited the answer with a fix. Try again, please.
Zaid Khalil
Zaid Khalil 2021년 6월 19일
Yes that works now thank you so much for the help!

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Data Import and Export에 대해 자세히 알아보기

제품

릴리스

R2020b

질문:

2021년 6월 18일

댓글:

2021년 6월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by