Import and modify " .txt" files
Show older comments
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 Comments
Walter Roberson
on 26 Nov 2015
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
on 26 Nov 2015
Thorsten
on 26 Nov 2015
It would be best if you provide a sample file.
johnmay
on 26 Nov 2015
johnmay
on 26 Nov 2015
Answers (2)
Thorsten
on 26 Nov 2015
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 Comments
johnmay
on 26 Nov 2015
johnmay
on 26 Nov 2015
Edited: Walter Roberson
on 31 Jul 2022
Thorsten
on 26 Nov 2015
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
on 26 Nov 2015
Thorsten
on 26 Nov 2015
You mean reading and write to the same file? No, I don't think so.
johnmay
on 26 Nov 2015
johnmay
on 26 Nov 2015
0 votes
2 Comments
Walter Roberson
on 27 Nov 2015
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
on 1 Dec 2015
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!