Mercurial > getan
changeset 15:0bb0100b2c8d
Added a script to sort zeiterfassung.txt files by date. Useful to merge them.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Tue, 09 Sep 2008 21:43:00 +0200 |
parents | 83f99008a3f9 |
children | 22aa74768d97 |
files | ChangeLog contrib/zeitsort |
diffstat | 2 files changed, 55 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Aug 12 15:01:11 2008 +0200 +++ b/ChangeLog Tue Sep 09 21:43:00 2008 +0200 @@ -1,3 +1,9 @@ +2008-09-09 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * contrib/zeitsort: New. Sorts a zeiterfassung.txt file by + the dates in the lines. Useful to merge larger chunks + by simply append them and sort the result afterwards. + 2008-08-12 Sascha L. Teichmann <sascha.teichmann@intevation.de> * getan: When assiging a name to an anonym task remove and
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/zeitsort Tue Sep 09 21:43:00 2008 +0200 @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# zeitsort +# -------- +# (c) 2008 by Sascha L. Teichmann <sascha.teichmann@intevation.de> +# +# Simple script which sorts lines of zeiterfassung.txt files by date. +# +# This is Free Software licensed under the terms of GPLv3 or later. +# For details see LICENSE coming with the source of 'getan'. +# + +import sys +import re + +from datetime import date + +DATE = re.compile("(\d\d)\.(\d\d)\.(\d\d\d\d)") + +def date_cmp(a, b): + ma = DATE.search(a) + mb = DATE.search(b) + if not ma and not mb: return cmp(a, b) + if ma and not mb: return -1 + if not ma and mb: return +1 + da = date(int(ma.group(3)), int(ma.group(2)), int(ma.group(1))) + db = date(int(mb.group(3)), int(mb.group(2)), int(mb.group(1))) + return cmp(da, db) + +def main(): + all = [] + while True: + line = sys.stdin.readline() + if not line: break + if not DATE.search(line): + # handle multi lines + if not all: all.append(line) + else: all[-1] += line + else: + all.append(line) + all.sort(date_cmp) + sys.stdout.write(''.join(all)) + sys.stdout.flush() + +if __name__ == '__main__': + main() + +# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: