[Tutor] reading parts of a input string into different variables based on units.

Alan Gauld alan.gauld at btinternet.com
Thu Mar 20 00:27:00 CET 2008

"Tim Michelsen" <timmichelsen at gmx-topmail.de> wrote

> I would like to read several parts of a string into different 
> variables
> based on the (physical) units of the quantities.
> Here's my testing code:
> ###############
> mystring = '2m 4cm 3mm' # can also be '1pound 30pence', ...
> mylist = mystring.split(" ")

For something like this I'd use regular expressions.
If your strings vary in length then I'd use a separate regular
expression per unit then use that to findall matching
substrings for each unit.

> if first.endswith("m",-1):
>     m = first.strip("m")
> elif first.endswith("cm",-2):
>     cm = first.strip("cm")
> elif first.endswith("mm",-2):
>     mm = first.strip("mm")

I'd also look at using a dictionary to store the results
so that you can use the unit as a key.

> Well, I cannot get the meters assigned to the m variable, the
> centimeters to the cm variable and the milimeters to the mm 
> variable.
> All units end with "m" and therefore my code confuses the strings I 
> am
> looking for. I would always reassign the m variable.

A regex would avoid that since it would detect an m
as being diffrent to a cm or mm.

Of course you will have to work out the right regex but that
shouldn't be too difficult if you are sure you have a whitespace
separator and a number followed by the unit string.

The code then becomes (in pseudo code)

cm_re = # whatever
mm_re = # whatever
m_re = # whatever

units['cm'] = cm_re.findall(theString)
units['mm'] = mm_re.findall(theString)
units['m'] = m_re.findall(theString)

Now you have a list of values for each unit, you just need
to convert the string values to numeric and sum them or
whatever else you need to do.


Alan G. 

More information about the Tutor mailing list