Effacer les filtres
Effacer les filtres

Pulling out a number and a date + time from text file after specific lines

1 vue (au cours des 30 derniers jours)
Hello all,
I have the following two lines in my text file:
Time of Interval 0: 03/03/18 18:14:02
Interval: 0.02 sec
First off, how can I pull out the number after "Interval:" ?
Secondly, how can I do the same for the date and time after "Time of Interval 0:" ?
The number and the date vary from file to file, but the text preceding them is always the same. I need a solution that works in every situation.
Thanks in advance!

Réponse acceptée

Bob Thompson
Bob Thompson le 27 Juin 2019
The most reliable way that I know of to get this is by using fgetl.
file = fopen('mytextfile.txt'); % Access the file
line = fgetl(file); % Read first line
c = 1; % Record the line number for debugging purposes
while ~isnumeric(line) & ~strcmp(line(1:16),'Time of Interval') % Check for desired line, or end of file
line = fgetl(file); % Read next line
c = c + 1; % Advance line count
end
parts = strsplit(line,': ');
number = str2num(parts{1}(18:end));
dt = datetime(parts{2});
There may be some thing syou need to tweak to make it personalized to your inputs, but that should work.
  1 commentaire
Heidi Mäkitalo
Heidi Mäkitalo le 2 Juil 2019
Modifié(e) : Heidi Mäkitalo le 2 Juil 2019
For some reason Matlab complained about matrix dimensions being exceeded when I tried to use your code, don't know what that was about. This is how I ended up doing it:
Zero interval
function zinterval = FindZeroInterval(file)
opened_file = fopen(file,'rt');
zinterval = '';
while ~strncmpi(zinterval,'Time of Interval 0',18)
zinterval = fgetl(opened_file);
end
zinterval = datetime(zinterval(20:end), 'InputFormat','MM/dd/yy HH:mm:ss');
end
which gives
zinterval =
datetime
03-Mar-2018 18:14:02
and interval
function interval = FindInterval(file)
opened_file = fopen(file,'rt');
interval = '';
while ~strncmpi(interval,'Interval:',8)
interval = fgetl(opened_file);
end
interval = str2double(regexp(interval,'\d+[\.]?\d*','match','once'));
end
which gives
interval =
0.0200
So basically I looked after your answer but changed some things around. Thanks a lot for your help!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by