MATLAB Answers

0

How can i read multiple values in a string?

Asked by Marco Silva on 12 Aug 2019
Latest activity Commented on by Marco Silva on 12 Aug 2019
Hi guys,
I have a problem getting some values.
Basically, i have a variable (string) that always has the same format but with a variable length.
Some examples:
  1. " H:2T:16799C:7| H:2T:16803C:15 | H:1T:17399C:11 "
  2. " H:4T:16500C:7 "
  3. " H:6T:568C:20| H:5T:313929C:11 "
How we can see, the variable has the same format in all examples but can have a variable number of repetitions.
I want to read the values, for the first example: 2 - 16799 - 7 | 2 - 16803 - 15 | 1 - 17399 - 11.
How can i do this dynamically? To be able to read in all cases.
Thanks.

  0 Comments

Sign in to comment.

Tags

1 Answer

Answer by Joel Handy on 12 Aug 2019
Edited by Joel Handy on 12 Aug 2019
 Accepted Answer

I believe a regular expression along these lines is what you are looking for.
data = regexp('1º:" H:2T:16799C:7| H:2T:16803C:15 | H:1T:17399C:11 "', ...
'H:(?<H>\d+)T:(?<T>\d+)C:(?<C>\d+)', 'names')
H = str2double({data.H})
T = str2double({data.T})
C = str2double({data.C})
If these are all lines in a file, you can read the entire file into a signle string and process everything at once.
MyString = sprintf('1º:" H:2T:16799C:7| H:2T:16803C:15 | H:1T:17399C:11 "\n2º:" H:4T:16500C:7 "\n3º:" H:6T:568C:20| H:5T:313929C:11 "')
regexp(MyString, 'H:(?<H>\d+)T:(?<T>\d+)C:(?<C>\d+)', 'names')

  1 Comment

The regular expression works perfectly. Thank you !!

Sign in to comment.