textscan to parse string

Hello,
I am trying to use textscan to parse an IP address to get 4 integers:
str = '48.2.81.56'
integers = textscan(str,'%u8',4, 'Delimiter', '.');
Why is this is not working correctly?
Thank you.

 Respuesta aceptada

Walter Roberson
Walter Roberson el 20 de Feb. de 2013

1 voto

Unfortunately, in at least some versions, textscan() keeps reading for numeric fields as long as what is in the input is characters that could be part of a number format. It does not pay attention to the delimiter until after it has done that.
So the 48.2.81.56 is read as "4 is a digit, 8 is a digit, decimal place is part of a floating point format, 2 is a digit, decimal point has already occurred in the number so the number must have ended, 48.2; now look, the decimal point is the delimiter. Okay 8 and 1 are digits, decimal point is part of a floating point format, 5 and 6 are digits, end of string so the number has ended, 81.56. Now convert the 48.2 and 81.56 into the %u8 format."
What you should do instead is
integers = uint8( str2double( regexp( str, '\.', 'split' ) ) )

4 comentarios

Andrei Bobrov
Andrei Bobrov el 20 de Feb. de 2013
regexp( str, '\d*', 'match' )
Walter Roberson
Walter Roberson el 20 de Feb. de 2013
Yes, that is an alternative to 'split'; the str2double() and uint8() would still be needed around it, of course.
Hugo SP
Hugo SP el 20 de Feb. de 2013
Thank you for the answer. However, I think that this is a bug and should be corrected. I don't understand how '.' is part of an integer format, which is what I requested. If it was %f I would understand the error.
Walter Roberson
Walter Roberson el 20 de Feb. de 2013
Please submit a bug report; I do not work for Mathworks.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Characters and Strings en Centro de ayuda y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by