Import and modify " .txt" files

Hi
I have some ".txt" files with this structure :
useless
useless
useless
...
data
data
...
useless
useless
useless
data
...
And I would like to have a .txt file like this :
data
data
data
...
I just know that each first line of data section begins with '1' but the length of the headerline (useless) is not fixed ! So I would like to iterate until lines begins with '1' and then keep the data.
How would you do that the easiest way ?
Thanks a lot

댓글 수: 5

Walter Roberson
Walter Roberson 2015년 11월 26일
How can you tell when you have reached the end of a block of data?
What is the format of each line of the data section? Is it a single numeric value per line?
johnmay
johnmay 2015년 11월 26일
Data comes from a measurement In the 'useless' section, I got the number N of measurements points (with strfind....). And N is actually the length of each data block. So I would like Matlab to delete lines until line begins with '1' then to keep lines until the end of the data block ..
Data section is a three or four columns (dépends of the data block) of numerical values
Thorsten
Thorsten 2015년 11월 26일
It would be best if you provide a sample file.
johnmay
johnmay 2015년 11월 26일
Here is a sample file. As you can see 'X-Axis Size' gives me the number of measurement points (10) and I still have this value with some code (strfind...)
johnmay
johnmay 2015년 11월 26일
Sorry, here it is... And file2 is what I want
Many thanks

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

답변 (2개)

Thorsten
Thorsten 2015년 11월 26일

0 개 추천

Copy those lines that have four numbers:
fid = fopen('file.txt', 'r');
fid2 = fopen('file2.txt', 'w');
line = fgets(fid);
while line ~= -1
[~, count] = sscanf(line, '%f');
if count == 4
fprintf(fid2, '%s', line);
end
line = fgets(fid);
end
fclose(fid)
fclose(fid2)

댓글 수: 6

johnmay
johnmay 2015년 11월 26일
Thanks. I have just tried...
'file2.txt' has a single line which is the first line of my data section.. :(
johnmay
johnmay 2015년 11월 26일
편집: Walter Roberson 2022년 7월 31일
You Genius ! Many thanks ! !
That's weird. It works smoothly for me. You could add a
disp(line)
disp(count)
pause
in the loop and see if the lines are properly detected.
johnmay
johnmay 2015년 11월 26일
Is it possible do this with only one file ?
Thorsten
Thorsten 2015년 11월 26일
You mean reading and write to the same file? No, I don't think so.
johnmay
johnmay 2015년 11월 26일
Last question : when using 'fprintf' is there a way to write only the 'x' first columns of my line? and not the whole line So that the final file has a constant number of columns and could be opened easily ?
Many thanks

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

johnmay
johnmay 2015년 11월 26일

0 개 추천

Last question : when using 'fprintf' is there a way to write only the 'n' first columns of my line? and not the whole line. So that the final file has a constant number of columns (n) and could be opened easily ?
Many thanks

댓글 수: 2

Before the loop:
n = 2; %whatever is appropriate
fmt = repmat('%f ', 1, n);
fmt(end:end+1) = '\n'; %newline, unrelated to the variable 'n'
In the loop:
[data, count] = sscanf(line, '%f');
if count >= n
fprintf(fid2, fmt, data(1:n));
end
johnmay
johnmay 2015년 12월 1일
Thanks a lot. I just tried but it doesn't work, it seems like it concatenates data in a single line.. Anyway many thanks

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

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2015년 11월 26일

편집:

2022년 7월 31일

Community Treasure Hunt

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

Start Hunting!

Translated by