annotate Demo/comparisons/sortingtest.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 84e2260db179
children 73758db2f464
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2651
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 #! /usr/local/bin/python
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # 2) Sorting Test
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # Sort an input file that consists of lines like this
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 #
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # var1=23 other=14 ditto=23 fred=2
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # such that each output line is sorted WRT to the number. Order
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 # of output lines does not change. Resolve collisions using the
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 # variable name. e.g.
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 #
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # fred=2 other=14 ditto=23 var1=23
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 #
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # Lines may be up to several kilobytes in length and contain
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 # zillions of variables.
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 # This implementation:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 # - Reads stdin, writes stdout
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # - Uses any amount of whitespace to separate fields
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # - Allows signed numbers
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 # - Treats illegally formatted fields as field=0
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 # - Outputs the sorted fields with exactly one space between them
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 # - Handles blank input lines correctly
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 import regex
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 import string
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 import sys
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 def main():
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 prog = regex.compile('^\(.*\)=\([-+]?[0-9]+\)')
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 def makekey(item, prog=prog):
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 if prog.match(item) >= 0:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 var, num = prog.group(1, 2)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 return string.atoi(num), var
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 else:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 # Bad input -- pretend it's a var with value 0
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 return 0, item
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 while 1:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 line = sys.stdin.readline()
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 if not line:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 break
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 items = string.split(line)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 items = map(makekey, items)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 items.sort()
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 for num, var in items:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 print "%s=%s" % (var, num),
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 print
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 main()