mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	use re module use .split() string method Doesn't use 'for line in sys.stdin'; that ends up changing its interactive behaviour.
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable 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()
 |