/Demo/comparisons/sortingtest.py
http://unladen-swallow.googlecode.com/ · Python · 51 lines · 23 code · 5 blank · 23 comment · 6 complexity · fc4bca9c3e4999d8df7dbd21d99c402f MD5 · raw file
- #! /usr/bin/env python
- # 2) Sorting Test
- #
- # Sort an input file that consists of lines like this
- #
- # var1=23 other=14 ditto=23 fred=2
- #
- # such that each output line is sorted WRT to the number. Order
- # of output lines does not change. Resolve collisions using the
- # variable name. e.g.
- #
- # fred=2 other=14 ditto=23 var1=23
- #
- # Lines may be up to several kilobytes in length and contain
- # zillions of variables.
- # This implementation:
- # - Reads stdin, writes stdout
- # - Uses any amount of whitespace to separate fields
- # - Allows signed numbers
- # - Treats illegally formatted fields as field=0
- # - Outputs the sorted fields with exactly one space between them
- # - Handles blank input lines correctly
- import re
- import string
- import sys
- def main():
- prog = re.compile('^(.*)=([-+]?[0-9]+)')
- def makekey(item, prog=prog):
- match = prog.match(item)
- if match:
- var, num = match.group(1, 2)
- return string.atoi(num), var
- else:
- # Bad input -- pretend it's a var with value 0
- return 0, item
- while 1:
- line = sys.stdin.readline()
- if not line:
- break
- items = line.split()
- items = map(makekey, items)
- items.sort()
- for num, var in items:
- print "%s=%s" % (var, num),
- print
- main()