MATLAB Answers

0

How to read specific data from a text file

Asked by Iman Baz on 23 May 2019 at 12:52
Latest activity Commented on by Adam Danz
on 23 May 2019 at 14:52
Hello,
I want to read the latitude and longitude values (Station and Epicenter) from the following text file.
...
...
Station 37.94 N 47.54 E Altitude 1699m Azimuth L 0 T 90 Vs30 406
Epicenter 37.99 N 48.15 E FD 28 Km Mb0 Ms0 Mw6 Mn0 ML6.2
...
...
I used the following code for reading geographic coordinate of station
fid=fopen(FileName,'r') ;
text1 = textscan(fid,'%s','Delimiter','','endofline','');
text1 = text1{1}{1};
SLa=regexp(text1,'Station[\s]+(\d*\.?\d+)','tokens') ;
SLa=str2double([SLa{:}])
SLo=regexp(text1,'Station[\s] N +(\d*\.?\d+)','tokens') ;
SLo=str2double([SLo{:}])
and I got the following results
SLa =
37.9400
SLo =
NaN
I think I missed something in line 6, could you please help me to fix it?
Thanks

  0 Comments

Sign in to comment.

2 Answers

Answer by Adam Danz
on 23 May 2019 at 13:08
Edited by Adam Danz
on 23 May 2019 at 13:09
 Accepted Answer

You should be able to pull both numbers out at the same time with this:
LaLoTokens = regexp(text1,'Station +(\d*\.?\d+) +N +(\d*\.?\d+)', 'tokens');
LaLo = str2double([LaLoTokens{:}{:}]);
% or (depending on how 'text1' is stored)
LaLo = str2double([LaLoTokens{:}]);
Here's a great site to put together regular expressions: https://regex101.com/

  2 Comments

Dear Adam,
Thank you for your prompt reply. that's worked.
Glad I could help! I always go directly to that regex101 website any time I need to work out an expression.

Sign in to comment.


Answer by madhan ravi
on 23 May 2019 at 13:15

Simpler:
S=fileread(filename);
sscanf(S,'Station %f N %f')

  0 Comments

Sign in to comment.