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:
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)