Showing 1 changed files with 45 additions and 34 deletions
+45 -34
analyse-votes-AN
... ...
@@ -7,6 +7,8 @@ for tool in sqlite3 getopt md5sum mktemp; do
7 7
     }
8 8
 done
9 9
 
10
+IFS_=$IFS
11
+
10 12
 function create_database () {
11 13
     declare -A groupes
12 14
     if test -z "${groupes[@]}"; then
... ...
@@ -130,11 +132,12 @@ function update_database () {
130 132
 }
131 133
 
132 134
 function write_comparaison () {
133
-    result="comparaisons $cible avec $groupe_ref${dossier:+ - ${dossier}}"
135
+    result="comparaisons ${groupe[0]} avec ${groupe_ref:-GDR}${dossier:+ - ${dossier}}"
134 136
     content="/dev/shm/$result/content.xml"
135 137
     id_cols="Scrutin Date Titre Adoption"
136 138
     typevotes=$(sqlite3 "$in_ram_database" <<< "select nom from votes")
137
-    nb_cols=$(wc -w <<< "$id_cols $typevotes $typevotes")
139
+    nb_cols=$(( $(wc -w <<< $id_cols) + $(wc -w <<< $typevotes) * ${#groupe[@]} ))
140
+    last_col=$(awk -v n=$nb_cols 'BEGIN{printf("%c%c", n < 27 ? "" : int(n/26) + 64, (n % 26) + (n % 26 == 0 ? 26 : 0) + 64)}' | tr -d '\0')
138 141
 
139 142
     echo "génération du fichier $result"
140 143
 
... ...
@@ -163,6 +166,7 @@ EOmetainf
163 166
     <office:automatic-styles>
164 167
 EOcontent
165 168
 
169
+    IFS=$'\n'
166 170
     for i in $(seq $nb_cols); do
167 171
         cat >> "$content" << EOcontent
168 172
             <style:style style:name="co$i" style:family="table-column">
... ...
@@ -193,11 +197,16 @@ EOcontent
193 197
     for i in $(seq $(wc -w <<< $typevotes)); do
194 198
         cat >> "$content" << EOcontent
195 199
         <table:table-column table:style-name="co1" table:default-cell-style-name="ce1"/>
196
-        <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
197 200
 EOcontent
201
+        for (( g = 1; g < ${#groupe[@]}; g++ )); do
202
+            cat >> "$content" << EOcontent
203
+            <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
204
+EOcontent
205
+        done
198 206
     done
199 207
     echo '<table:table-row table:style-name="ro1">' >> "$content"
200 208
 
209
+    IFS=$IFS_
201 210
     for colonne in $id_cols; do
202 211
         cat >> "$content" << EOcontent
203 212
             <table:table-cell office:value-type="string" calcext:value-type="string">
... ...
@@ -207,7 +216,7 @@ EOcontent
207 216
     done
208 217
 
209 218
     for typevote in $typevotes; do
210
-        for g in "$cible" $groupe_ref; do
219
+        for g in "${groupe[@]}"; do
211 220
             cat >> "$content" << EOcontent
212 221
                 <table:table-cell office:value-type="string" calcext:value-type="string">
213 222
                 <text:p>$typevote - $g</text:p>
... ...
@@ -222,6 +231,7 @@ EOcontent
222 231
     begin=$(date +%s)
223 232
     line=1
224 233
     test -z "$seq" && qty=$(( $last - $first ))
234
+    IFS=$'\n'
225 235
     for scrutin in $(eval ${seq:-seq $first $last}); do
226 236
 
227 237
         data=$(sqlite3 "$in_ram_database" <<< "select date,intitulé,adoption,url.url from scrutins inner join url on scrutins.url = url.id where num is $scrutin")
... ...
@@ -259,7 +269,7 @@ EOcontent
259 269
             </table:table-cell>
260 270
 EOcontent
261 271
         for typevote in 0 1 2 3; do
262
-            cible_votes=$(sqlite3 "$in_ram_database" <<< "select
272
+            votes=$(sqlite3 "$in_ram_database" <<< "select
263 273
                                         count(député)
264 274
                                      from
265 275
                                         dépouillement
... ...
@@ -268,26 +278,30 @@ EOcontent
268 278
                                      and
269 279
                                         vote is $typevote
270 280
                                      and
271
-                                        groupe is $groupe_id ${nom:+ and député is ${nom%|*}}")
272
-            ref_votes=$(sqlite3 "$in_ram_database" <<< "select
273
-                                        count(député)
274
-                                     from
275
-                                        dépouillement
276
-                                     where
277
-                                        scrutin is $scrutin
278
-                                     and
279
-                                        vote is $typevote
280
-                                     and
281
-                                        groupe is $groupe_ref_id")
281
+                                        groupe is ${groupe_id[0]} ${nom:+ and député is ${nom%|*}}")
282 282
             cat >> "$content" << EOcontent
283
-                <table:table-cell office:value-type="float" office:value="$cible_votes" calcext:value-type="float">
284
-                <text:p>$cible_votes</text:p>
285
-                </table:table-cell>
286
-                <table:table-cell office:value-type="float" office:value="$ref_votes" calcext:value-type="float">
287
-                <text:p>$ref_votes</text:p>
283
+                <table:table-cell office:value-type="float" office:value="$votes" calcext:value-type="float">
284
+                <text:p>$votes</text:p>
288 285
                 </table:table-cell>
286
+EOcontent
287
+            for (( g = 1; g < ${#groupe_id[@]}; g++ )); do
288
+                votes=$(sqlite3 "$in_ram_database" <<< "select
289
+                                            count(député)
290
+                                         from
291
+                                            dépouillement
292
+                                         where
293
+                                            scrutin is $scrutin
294
+                                         and
295
+                                            vote is $typevote
296
+                                         and
297
+                                            groupe is ${groupe_id[$g]}")
298
+                cat >> "$content" << EOcontent
299
+                    <table:table-cell office:value-type="float" office:value="$votes" calcext:value-type="float">
300
+                    <text:p>$votes</text:p>
301
+                    </table:table-cell>
289 302
 EOcontent
290 303
             done
304
+        done
291 305
         echo '</table:table-row>' >> "$content"
292 306
 
293 307
         if test $(( ($line * 100) / ${qty:-$last} )) -ne $progress; then
... ...
@@ -308,7 +322,7 @@ EOcontent
308 322
     </table:table>
309 323
     <table:named-expressions/>
310 324
     <table:database-ranges>
311
-    <table:database-range table:name="__Anonymous_Sheet_DB__0" table:target-range-address="&apos;$result&apos;.D1:&apos;$result&apos;.$(printf "\\$(printf '%03o' $((64+$nb_cols)))")$line" table:display-filter-buttons="true"/>
325
+    <table:database-range table:name="__Anonymous_Sheet_DB__0" table:target-range-address="&apos;$result&apos;.D1:&apos;$result&apos;.$last_col$line" table:display-filter-buttons="true"/>
312 326
     </table:database-ranges>
313 327
     </office:spreadsheet>
314 328
     </office:body>
... ...
@@ -369,11 +383,11 @@ while [[ $# -gt 0 ]]; do
369 383
 #|ne génère pas de fichier de résultat
370 384
             db_update_only=$true_flag;;
371 385
         "--cible")
372
-#<nom court du groupe>|génère un comparatif pour ce groupe (par défaut LREM)
373
-            groupe="${2^^}"
386
+#<nom court du groupe>|génère un comparatif pour ce groupe. Par défaut LREM
387
+            groupe[0]="${2^^}"
374 388
             shift;;
375 389
         "--ref")
376
-#<nom court du groupe>|compare avec ce groupe (par défaut GDR)
390
+#<nom court du groupe ou des groupes>|compare avec ce ou ces groupes. Si plusieurs groupes, ils sont séparés par une virgule, sans espace. Par défaut GDR
377 391
             groupe_ref="${2^^}"
378 392
             shift;;
379 393
         "--député")
... ...
@@ -467,9 +481,7 @@ else
467 481
     fi
468 482
 fi
469 483
 
470
-groupe=${groupe:-LREM}
471
-groupe_ref=${groupe_ref:-GDR}
472
-cible=$groupe
484
+IFS=',' groupe=(${groupe[0]:-LREM} ${groupe_ref:-GDR})
473 485
 
474 486
 in_ram_database=$(mktemp --dry-run /dev/shm/XXXXXXXXXXXX)
475 487
 if test -r "$database"; then
... ...
@@ -478,10 +490,10 @@ else
478 490
     create_database
479 491
 fi
480 492
 
481
-for g in groupe groupe_ref; do
482
-    eval "${g}_id=$(sqlite3 "$in_ram_database" <<< "select id from groupes where nom_court is '${!g}'")"
483
-    if eval "test -z \$${g}_id"; then
484
-        echo "groupe ${!g} inconnu" >&2
493
+for (( g = 0; g < ${#groupe[@]}; g++ )); do
494
+    groupe_id[$g]=$(sqlite3 "$in_ram_database" <<< "select id from groupes where nom_court is '${groupe[$g]}'")
495
+    if test -z "${groupe_id[$g]}"; then
496
+        echo "groupe ${groupe[$g]} inconnu" >&2
485 497
         exit 1
486 498
     fi
487 499
 done
... ...
@@ -532,14 +544,13 @@ if test "$depute" = $true_flag; then
532 544
             exit 1
533 545
         else
534 546
             nom=$(sqlite3 "$in_ram_database" <<< "select députés.id,députés.nom from députés inner join groupes on groupes.id = députés.groupe where députés.nom like '%$nom%' and groupes.nom_court is '$groupe' collate nocase")
535
-            cible="${nom#*|} ($groupe)"                        
547
+            groupe[0]="${nom#*|} (${groupe[0]})"
536 548
         fi
537 549
     fi
538 550
 fi
539 551
 
540 552
 if test "$dossier" = $true_flag; then
541 553
     if test -z "$dossier_value"; then
542
-        IFS_=$IFS
543 554
         IFS=$'\n'
544 555
         select dossier in $(sqlite3 "$in_ram_database" <<< "select url from url" | sed 's,^.*/dossiers/,,; s/_/ /g; s/.asp$//'); do
545 556
             if test -n "$dossier"; then