Skip to content

Repository files navigation

pairset – Turnierplanung: Spielplan und Adressliste

Ein Python-Skript, das aus einer CSV-Teilnehmerliste eine Word-Datei (begegnungen.docx) mit Spielplan und/oder Adresslisten fuer fuenf Turniertypen erzeugt. Jeder Abschnitt beginnt auf einer neuen Seite und hat eine eigene Kopfzeile sowie eine Seitenzaehlung, die bei 1 startet.


Inhaltsverzeichnis

  1. Voraussetzungen
  2. Schnellstart
  3. CSV-Format
  4. Turniere und Eintraege
  5. Ausgabedatei
  6. Fehlerbehandlung
  7. Projektstruktur

Voraussetzungen

Werkzeug Mindestversion Zweck
Python 3.10 Laufzeit
python-docx beliebig Word-Datei erzeugen
uv beliebig Abhaengigkeiten automatisch laden (empfohlen)
just beliebig Kurzbefehle (optional)

uv und just sind optional; das Skript laeuft auch mit einem standard Python-Interpreter und manuell installiertem python-docx.


Schnellstart

# Empfohlen: uv laedt python-docx automatisch aus dem PEP-723-Header
uv run begegnungen.py                        # Spielplan + Adressen (Standard)
uv run begegnungen.py --no-addresses         # nur Spielplan
uv run begegnungen.py --no-pairings          # nur Adressliste

# Kurzbefehle mit Just
just all          # Spielplan + Adressliste
just plan         # nur Spielplan
just addresses    # nur Adressliste

# Oder mit bereits installiertem python-docx
pip install python-docx
python begegnungen.py

Die Datei teilnehmer.csv muss sich im selben Verzeichnis befinden. Das Ergebnis wird als begegnungen.docx im selben Verzeichnis gespeichert.

Kommandozeilenoptionen

Option Standard Wirkung
--pairings / --no-pairings an Spielplan-Abschnitt erzeugen / weglassen
--addresses / --no-addresses an Adresslisten-Abschnitt erzeugen / weglassen

Beide Optionen sind standardmaessig aktiv; die --no-*-Varianten schalten den jeweiligen Abschnitt ab. Sind beide deaktiviert, bricht das Skript mit einer Fehlermeldung ab.


CSV-Format

Spalten in dieser Reihenfolge (Kopfzeile in der ersten Zeile erforderlich):

Nachname,Vorname,Telefonnummer,Email,Turniere
  • Telefonnummer und Email erscheinen nur in der Adressliste, nicht im Spielplan; sie duerfen leer bleiben.
  • Die Spalte Turniere enthaelt die Turnier-Eintraege einer Person, getrennt durch Semikolon, z.B. DE;DD5;MD1.
  • Eine Person kann 0 Turnier-Eintraege haben (nimmt an keinem Turnier teil) bis realistisch maximal drei (Einzel, Doppel, Mixed).

Beispielzeile:

Mustermann,Maja,+49 170 1234567,maja@example.com,DE;DD5;MD1

Maja spielt Dameneinzel, ist im Damendoppel-Paar 5 und im Mixed-Doppel-Paar 1.

Eine Vorlage ohne echte Daten befindet sich in teilnehmer-template.csv.


Turniere und Eintraege

Turnier-Kuerzel

Kuerzel Langname Typ
HE Herreneinzel Einzel
DE Dameneinzel Einzel
HD Herrendoppel Doppel
DD Damendoppel Doppel
MD Mixed-Doppel Doppel

Einzel-Eintraege

Einfach das Kuerzel, ohne Zahl: HE, DE.

Doppel-Eintraege

Kuerzel direkt gefolgt von einer numerischen Paar-ID (kein Trennzeichen):

HD27   ->  Herrendoppel, Paar Nr. 27
MD1    ->  Mixed-Doppel, Paar Nr. 1
DD5    ->  Damendoppel,  Paar Nr. 5

Regel: Jede Paar-ID muss in der gesamten CSV genau 0-mal oder 2-mal vorkommen. Eine ID, die 1-mal, 3-mal oder oefter erscheint, ist fehlerhaft und wird verworfen.

Untergruppen (optionaler dritter Buchstabe)

Durch einen einzelnen Buchstaben direkt nach dem Turnier-Kuerzel lassen sich Untergruppen (z.B. Altersklassen oder Leistungsgruppen) innerhalb eines Turniers definieren. Das Skript erzeugt dann fuer jede Untergruppe einen eigenen Abschnitt in der Ausgabedatei.

Einzel:

HEa    ->  Herreneinzel, Gruppe a
HEb    ->  Herreneinzel, Gruppe b

Doppel: Buchstabe zwischen Kuerzel und Paar-Nummer:

HDa3   ->  Herrendoppel, Gruppe a, Paar Nr. 3
HDb7   ->  Herrendoppel, Gruppe b, Paar Nr. 7
MDa2   ->  Mixed-Doppel, Gruppe a, Paar Nr. 2

Ein Turnier ohne Gruppenangabe (z.B. HE) und dasselbe Turnier mit Gruppenangabe (z.B. HEa) koennen gleichzeitig in der CSV vorkommen; sie werden als getrennte Turnier-Abschnitte behandelt.

Begegnungslogik

  • Einzel: Jede Spielerin / jeder Spieler tritt gegen jede andere Person an (Round-Robin).
  • Doppel: Jedes Paar tritt gegen jedes andere Paar an (Round-Robin).

In der Spielplan-Ausgabe erscheint nur Vorname Nachname (mit Paar-ID in Klammern) – Telefonnummer und E-Mail bleiben ausschliesslich in der Adressliste.


Ausgabedatei

begegnungen.docx enthaelt pro Turnier (bzw. Untergruppe) bis zu zwei Abschnitte – Adressliste und Spielplan – je nach den gewaehlten Optionen. Jeder Abschnitt beginnt auf einer neuen Seite.

Adressliste (--addresses, Standard: an)

Zweispaltige Tabelle mit Kontaktdaten aller Teilnehmenden des Turniers:

Element Inhalt
Kopfzeile Turniername (Anzahl) – Adressen, fett, 14 pt
Fusszeile Seite N (dynamisches PAGE-Feld)
Tabelleninhalt Name [Paar-ID], Telefonnummer, E-Mail

Bei Doppeln werden beide Partnerinnen/Partner eines Paares als Block in einer Zelle zusammengefasst.

Spielplan (--pairings, Standard: an)

Tabelle aller Round-Robin-Begegnungen des Turniers:

Element Inhalt
Kopfzeile Turniername (Anzahl) bzw. … – Spielplan (wenn beide Modi aktiv), fett, 14 pt
Fusszeile Seite N (dynamisches PAGE-Feld)
Seitenzaehlung beginnt pro Abschnitt bei 1
Tabellenspalten Spieler/Team 1 – Spieler/Team 2 – Satz 1 – Satz 2 – Tiebreak

Die Tabellenkopfzeile wird bei Seitenumbruechen wiederholt. Bei Doppeln stehen beide Partnernamen untereinander in einer Zelle.


Fehlerbehandlung

Warnungen werden auf stderr ausgegeben; der betroffene Eintrag wird verworfen. Alle uebrigen, korrekten Turnier-Anmeldungen derselben Person bleiben gueltig.

Situation Reaktion
Doppel-Paar-ID kommt 1-, 3- oder mehrfach vor WARNUNG + Eintrag verwerfen
Doppel-Kuerzel ohne Zahl (z.B. nur HD oder HDa) WARNUNG + Eintrag verwerfen
Einzel-Kuerzel mit Zahl (z.B. HE3) WARNUNG + Eintrag verwerfen
Eintrag passt nicht zum Muster [A-Z]{2}[A-Za-z]?[0-9]* WARNUNG + Eintrag verwerfen
--pairings und --addresses beide deaktiviert Fehler + Abbruch

Beispiel-Ausgabe bei einem Fehler:

WARNUNG: Paar-ID 'HD5' kommt 1x vor (erwartet: 2x). Beteiligte: Jakob Boss. Ignoriert.

Projektstruktur

pairset/
├── begegnungen.py           # Hauptskript
├── teilnehmer.csv           # Teilnehmerliste (echte Daten, git-crypt verschluesselt)
├── teilnehmer-template.csv  # Vorlage fuer das CSV-Format ohne echte Daten
├── justfile                 # just-Konfiguration: plan / addresses / all
└── README.md                # Diese Datei

Datenschutz-Hinweis: teilnehmer.csv kann echte persoenliche Daten enthalten (Namen, Telefonnummern, E-Mail-Adressen). Die Datei ist im Repository mit git-crypt verschluesselt. Die mitgelieferte teilnehmer-template.csv zeigt das Format ohne echte Daten.

About

Turnierplanung für Tennis/Badminton-Vereine: Aus einer Teilnehmer-CSV mit Einzel- und Doppel-Anmeldungen werden automatisch die Begegnungslisten erzeugt (jeder gegen jeden, Paare über Paar-IDs).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages