Frühzeitige Auswertung von Dialog checklist

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Methusalix

Frühzeitige Auswertung von Dialog checklist

Beitrag von Methusalix » 28.08.2016 00:39:16

Hallo,

wir halten demnächst bei uns im Büro eine Wahl ab und ich habe angeboten, mal einen Vorschlag für eine digitale Wahl zu machen.

Code: Alles auswählen

#!/bin/sh
while true
do
dialog --backtitle Wahlinfos --title 'Bitte lesen Sie die Hinweise sorgfältig' --msgbox "\n\nSehr geehrter Wähler, bei dieser Wahl... " 30 80

dialog --stdout --backtitle Wahl --title Kandidatenliste --nocancel --checklist "Kandidatenliste" 44 110 15 \
     "1" "Albert Aname" off \
     "2" "Berta Bname"  off \
   .........
     "14" "Nina Nname" off >/home/user/tmp/wahl

if [ `cat /home/user/tmp/wahl | wc -w` -gt 7 ]; then
	dialog --backtitle Anzahl --title Hinweis --msgbox "Sie haben mehr als 7 Personen gewählt. Ihre Wahl ist ungültig!" 10 80
else
        #Auswertung der Eingabe...
Inklusive Eingabeauswertung, die hier erstmal keine Rolle spielt, funktioniert das ganz gut. Nun zu meinem Wunsch / meiner Frage:
Wenn der Wähler im checklist-Auswahldialog eine Person "anklickt", hätte ich gerne eine Einblendung der Art "Sie können noch 6 ..5 ..4.. Personen wählen." usw.
Irgendwo muß die Auswahl einer Person ja temporär zwischengespeichert sein und das will ich mir für eine Einblendung zunutze machen.

Gruß, M.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von MartinV » 28.08.2016 16:08:03

Irgendwo muß die Auswahl einer Person ja temporär zwischengespeichert sein und das will ich mir für eine Einblendung zunutze machen.
Ich vermute mal, der Zwischenspeicher liegt kaum erreichbar im RAM. Falls es eine Datei sein sollte, könntest Du z.B. in /tmp oder anderen Verdächtigen mit inotifywait schauen, ob dialog eine neue Datei anlegt.
Patchen des Sourcecodes von dialog wäre auch denkbar, wenn das den Aufwand wert ist.

Eine Alternative wäre es, statt der Option checklist die Option menu zu wählen, um bei jeder Auswahl eine neue, angepaßte Dialogbox zu präsentieren.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von eggy » 28.08.2016 16:32:15

Mal nen paar Fragen am Rande:

Wie gedenkst Du, das mit der "Nichtnachvollziehbarkeit" zu machen? Man will ja nicht, dass man hinterher noch sehen kann, wer z.B. vom ersten oder letzten Wähler gewählt wurde.

Was machst Du, wenn jemand sagt "ich hab den falschen Knopf gedrückt"? Bei Papierwahlen hat der Wähler ja noch die Möglichkeit draufzuschreiben "Kreuz an der falschen Stelle, das sollte eigentlich $dahin". Dein "Wahl ist ungültig" sollte vielleicht zwei Fälle unterscheiden, a) der Wähler wollte ungültig wählen, b) er hat einen Fehler gemacht (der ihm auf Papier evtl nicht unterlaufen wäre?).

Wie gehst Du generell mit Fehlern um? Was machst Du falls das System abstürzt.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von heisenberg » 28.08.2016 18:30:46

Ja, so Wahlgeschichten haben da so einige Fragen bzgl. der Vertraulichkeit, und und und... . So grundsätzlich hört sich die vorliegende Anfrage aber eher etwas kleiner an, als so etwas wie eine Bundestagswahl. Vielleicht sind da die Ansprüche an die Korrektheit nicht ganz so hoch.

Vielleicht ist da ein bisschen HTML auch nutzerfreundlicher als Dialog. Ist natürlich aufwendiger.

Hier nochmal ein Ansatz für Dialog:

Code: Alles auswählen

#!/bin/bash

kandidaten=("Albert Aussergewoehnlich" "Britta Blossshuebsch" "Christiane Clever")
stimmenzahl=5

function wahldialog {
        stimmenzahl=$1; shift
        while :;do
                dialog_cmd="dialog --stdout --backtitle Wahl --title Kandidatenliste --nocancel --menu 'Kandidatenliste(noch $stimmenzahl Stimmen uebrig)' 44 110 15 " 
                i=0
                for PERSON in "$@";do
                  ((i++))
                  gewaehlt[$i]=${gewaehlt["$i"]:- }
                  dialog_cmd="$dialog_cmd $i '["${gewaehlt["$i"]}"] $PERSON'"
                done
                kandidaten_nr="$(exec 3>&1; eval $dialog_cmd 2>&1 1>&3)"
                [[ "${gewaehlt[$kandidaten_nr]}" == "*" ]] \
                        && { gewaehlt[$kandidaten_nr]=" "; ((stimmenzahl++)); } \
                        || { gewaehlt[$kandidaten_nr]="*"; ((stimmenzahl--)); }
        done
}
while true
do
        wahldialog $stimmenzahl "${kandidaten[@]}" 
        break
done
Jede Rohheit hat ihren Ursprung in einer Schwäche.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von eggy » 28.08.2016 18:48:00

heisenberg hat geschrieben:So grundsätzlich hört sich die vorliegende Anfrage aber eher etwas kleiner an, als so etwas wie eine Bundestagswahl. Vielleicht sind da die Ansprüche an die Korrektheit nicht ganz so hoch.
Auch eine "kleinere Wahl" kann von entsprechenden Gesetzen geschützt sein, Beispiel Betriebsratwahl https://www.gesetze-im-internet.de/betrvg/

Methusalix

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von Methusalix » 28.08.2016 19:36:50

Hallo,
es handelt sich bei dieser Wahl um einen Vorgang, der in der Durchführung an keine Rechtsvorschriften gebunden ist. Natürlich gilt so etwas "gesunder Menschenverstand", Fairness, demokratisches Verständnis und dergleichen. Dafür ist durch vorgeschaltete Diskussionsrunden, an denen viele sehr unterschiedliche Diskutanten teilnehmen, gesorgt.
Ich bitte um Verständnis dafür, dass ich diese Aspekte hier nicht weiter diskutieren will - es hat mit der Fragestellung nichts zu tun. Bei weiterem Interesse bitte ich um Abspaltung in ein anderes Thema, wie das sonst ja auch hier und da gemacht wird.
Gruß, M.

Methusalix

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von Methusalix » 28.08.2016 19:44:01

Hallo,

@MartinV: ich kann auf die Schnelle nicht erkennen, dass das mit "--menu" lösbar ist, will aber gerne noch mal in der Dokumentation nachschauen. Danke.

@heisenberg: Als Ansatz ist das ja schon mal sehr interessant. In der Form für den Anwender jetzt erstmal etwas sperrig, aber da läßt sich ja noch was drehen. Ich muss mir das noch genauer für ein besseres Verständnis anschauen. Danke.

Gruß, M.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von heisenberg » 28.08.2016 20:06:47

@MartinV: ich kann auf die Schnelle nicht erkennen, dass das mit "--menu" lösbar ist, will aber gerne noch mal in der Dokumentation nachschauen. Danke.
Das ist jetzt wohl genau das, was ich getan habe. Zwei Dumme ein Gedanke :)
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Frühzeitige Auswertung von Dialog checklist

Beitrag von MartinV » 28.08.2016 20:26:14

Das ist jetzt wohl genau das, was ich getan habe. Zwei Dumme ein Gedanke :)
Britta Blosshübsch wäre stolz auf uns! :-) Elegante Lösung Deinerseits.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Antworten