eXma » Diskutieren » Computer und Technik
Startseite - Veranstaltungen - Mitglieder - Suche
Vollständige Version anzeigen: CSV in LaTeX einlesen und berechnen
mcnesium
da ich gerade mal wieder viel zuviel zeit mit einem kampf gegen word/excel zugebracht hab, würde ich das ganze für die zukunft gern ein wenig automatisieren und hab mir überlegt, ob ich das nicht mit latex bzw. ein bißchen bash scripting und dann mit latex bewerkstelligen kann. ich stell mir das folgendermaßen vor:

es geht darum, eine zeitabrechnung zu machen. anfangs habe ich eine csv-datei, in der pro zeile ein datum, eine startzeit und eine endzeit jeweils im format hh:mm:ss, sowie das projekt und der milestone drin steht, sortiert nach datum.
aus den zeiten muss eine dauer berechnet werden. daraus jeweils eine gesamtzeit pro milestone und projekt, und dann die gesamtzeit über alle projekte.
das ganze muss in eine tabelle geschrieben und aus der gesamtzeit der stundenlohn berechnet und in ein rechnungsschreiben eingetragen werden. am ende sollte ein pdf rauskommen, in dem auf die erste seite das rechnungsschreiben mit rechnungswert ist, und die folgenden seiten die tabelle mit den nach projekten und milestones sortierten zeiten und dauer.

wie könnte man denn an die sache rangehen, fragte ich erst mich und jetzt euch...
Polygon
Ich würd das Einlesen und die Ausgabe trennen. Für den Zwischenspeicher bietet sich SQLite an, da baut man gleich noch ein besseres "Archiv" mit auf, als mit CSV-Dateien.

Ein Parser der das File liest und die Einträge in eine SQLite Datenbank speichert. Alle nötigen Ausgaben sollten sich mit recht simplen SQL-Abfragen generieren lassen, da brauchst du vermutlich überhaupt keine Berechnungslogik mehr in den Tools (speziell Datumsrechnung kann ja schmerzhaft sein, mit SQL ein Traum). Ein anderes Script kann dir dann die nötigen Tabular-Umgebungen oder von mir aus auch das komplette Latex-File erzeugen.

Datenbankstruktur bei deiner Beschreibung mit 3 Tabellen:

1. Projekte (id, Projektname, ... (was noch wichtig ist))
2. Milestones (id, projektid, Milestonename, ... (whatever))
3. Zeit (id, projektid, milestoneid, datum, start, ende, .., (whatever))

Wobei ich hier statt Datum und einer Uhrzeit für Start/Ende eindach zweimal Datetime für Start und Ende nehmen würde. Ist dann auch kompatibler, wenn man mal Mitternacht durcharbeitet.

Und statt bash wäre Python meine Wahl, aber das ist Geschmackssache. Da alle Logik in der Datenbank steckt, würde bash genauso gehen.
JanLo
Ich würde das einfach in Python machen und irgend eine der templating engines nutzen um am Ende das Texfile zu bauen.
Zeitrechnerei ist mit timedelta kein Problem, csv einlesen ist auch trivial. Als Templating engine dann evetuell http://jinja.pocoo.org/ und fertig.