MATLAB Answers

Trouble using sscanf to find numbers in a string?

6 views (last 30 days)
Olivia Colombo
Olivia Colombo on 20 Feb 2019
Commented: Akira Agata on 20 Feb 2019
I'm new to using sscanf, and I'm trying to find the numbers within sentences that contain a temperature. Where it finds an F it converts the temp to celsius, then puts all the temperatures in a new array. The file is attached below. Thanks!

  1 Comment

Akira Agata
Akira Agata on 20 Feb 2019
Could you upload TemperatureRecord.txt to test your code?

Sign in to comment.

Answers (1)

Akira Agata
Akira Agata on 20 Feb 2019
Edited: Akira Agata on 20 Feb 2019
Thank you for uploading your data file!
How about the following?
% Read data file
fid = fopen('TemperatureRecord.txt','r');
s = textscan(fid,'%s','Delimiter','\r\n');
s = s{1};
fclose(fid);
% Remove leading and trailing space from each line
s = strip(s);
% Remove final ./!/?, if line ends with one of them
s = regexprep(s,'(\.|\!|\?)$','');
% Index where sentence ends with F/f/Fahrenheit/fahrenheit
idxF = endsWith(s,{'F','f','Fahrenheit','fahrenheit'});
% Extract number only
A = regexp(s,'[0-9\.]+','match');
% Convert to doulbe
A = cellfun(@str2double,A);
% Convert F to C
A(idxF) = (A(idxF) - 32)*(5/9);

  2 Comments

Stephen Cobeldick
Stephen Cobeldick on 20 Feb 2019
This will not work on linux (or on many files written by applications on Windows that do not insert useless carriage returns). Two simple adjustments make this work for all OS and all files:
fid = fopen('TemperatureRecord.txt','rt'); % rt
s = textscan(fid,'%s','Delimiter','\n'); % \n
fclose(fid);
s = s{1};
Akira Agata
Akira Agata on 20 Feb 2019
Hi Stephen-san,
Oh, I have been assuming running it on Windows, only.
Thank you for your useful comment!

Sign in to comment.

Sign in to answer this question.

Tags


Translated by