How to extract specific data from a .txt file
Show older comments
Hi Everyone,
I am trying to extract certain data which is location specific from a .txt file. The text file is not uniformly arranged & contains all kind of characters.
In my case I am looking to extract value of Fx & Fy in row 17 of the FILE.txt file. I have also attached the .txt file.
Looking forward to get it resolved.
Thank you & Reagrds,
Accepted Answer
More Answers (1)
filename = 'FILE.TXT';
S = fileread(filename);
XY = str2double(regexp(S, '(?<=F[XY]= )\S+', 'match'))
3 Comments
Abubakar Rashid
on 31 Jan 2023
Walter Roberson
on 31 Jan 2023
[XY] matches something that is either X or Y. F[XY]= matches F then either X or Y then = then space. The (?<= ) part means that the FX= or FY= must be present in the input stream and to position immediately after that, but that the text is not to be included in what is returned from the function. It positions the input stream but it does not extract anything from the input stream.
The \S+ matches any number of non-whitespace characters.
So the code looks for FX= or FY= in the input stream, and extracts the next column to be returned from the function. This searching is repeated as long as there are more occurances in the input stream, so both FX and FY would be extracted.
The return from regexp() with 'match' is going to be a cell array of character vectors. Those character vectors are passed to str2double() to be converted to numeric form.
A B C FX= 1325.3 Q= -5 FY= -23.2 P ZFY= 83
The expression as coded does not know to look for whitespace before the variable, so the ZFY= would be matched as being an occurance of FY= . So the regexp() would return {'1325.3', '-23.2', '83'} in this particular case. That could be adjusted if it mattered (but it doesn't matter to you.)
Abubakar Rashid
on 31 Jan 2023
Categories
Find more on Environment and Settings in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!