Calcul différence MISE et GAIN (projet RECAP)

Dans ce cas, juste inverser mise et résultat dans le calcul ne serait-il pas suffisant ?
Bloc de code:
echo $participant '=>' $((var_resultat - var_mise)) '€'
 
Un correction pour gérer les nom à rallonge (alex se retrouvera dans alexandra) :
Bloc de code:
## Soustraction de  MISE - GAIN
liste_participant=$(cut -f 1 -d';' /Users/xxx/Desktop/KENODATA/MISE.txt | sed 's/^@//')

for participant in $liste_participant
do

var_mise=0
var_resultat=0

var_mise=$(grep -i "@${participant};" /Users/xxx/Desktop/KENODATA/MISE.txt | cut -f 2 -d';')
var_resultat=$(egrep -i "^${participant} " /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt | cut -f 3 -d' ')

echo $participant '=>' $((var_mise - var_resultat)) '€'

done > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt

Pour le var_resultat, j'utilise egrep qui permet les expression régulière. Le "^" correspond au début de ligne, il trouvera donc tout les noms commençant en début de ligne et suivi d'un espace.

A noter que dans l'intégralité du dossier KENODATA, ton fichier "RESULTATSTATS.txt" n'a pas le bon encodage et ne pourra pas être traité par le script. Le var_resultat sera donc toujours vide dans ce cas.
 
J'ai mis le code proposé (qui prends en compte le probs de alex/alexandra).
J'ai changé l'encodage de RESULTATSTATS.txt de utf-16 en utf-8 (son nom est RESULTATSTATS_UTF8.txt)
Mais malgré cela, le calcul "mise & gain" ne fonctionne toujours pas correctement.



voici le code modifié
Bloc de code:
############################################################################################
##############  MISEGAIN (calcul MISE - GAIN pour avoir la balance  )##############
############################################################################################
## creation du fichier MISEGAIN.txt avec ajout du texte 'Depuis le tirage N°1 de l historique votre balance est de :'
echo  'Depuis le tirage N°1 de l historique votre balance est de :' > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt

# Ajout des grilles jouées par les membres afin d'additionner les mises totales de chacun. le nombre de lignes est limité a 5000.
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" >> "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | head -5000 >> "/Users/xxx/Desktop/KENODATA/mygames_full.txt"
#cat "/Users/xxx/Desktop/KENODATA/mygames.txt" "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | head -5000 > "/Users/xxx/Desktop/KENODATA/mygames_full.tmp" && mv "/Users/xxx/Desktop/KENODATA/mygames_full.tmp" "/Users/xxx/Desktop/KENODATA/mygames_full.txt"

while IFS= read -r ligne

do
  joueur_gain=$(echo ${ligne} | sed "s/ [- 0-9]*$/;1/" | sed "s/_X\([0-9][0-9]*\);1$/;\1/" )
  echo ${joueur_gain}
done < "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | awk -F';' '
  {
    tableau[$1]=tableau[$1]+$2
  }
  END {
    for ( joueur in tableau ) {
      printf "%s;%s\n",joueur,tableau[joueur]
    }
  }' | sort > "/Users/xxx/Desktop/KENODATA/MISE.txt"


# sed -e 's/@//' /Users/xxx/Desktop/KENODATA/MISE.txt > /Users/xxx/Desktop/KENODATA/MISECLEAN1.txt
# sed 's/;/ : /' /Users/xxx/Desktop/KENODATA/MISECLEAN1.txt > /Users/xxx/Desktop/KENODATA/MISECLEAN2.txt

## Soustraction de  MISE - GAIN
liste_participant=$(cut -f 1 -d';' /Users/xxx/Desktop/KENODATA/MISE.txt | sed 's/^@//')

for participant in $liste_participant
do

var_mise=0
var_resultat=0

var_mise=$(grep -i "@${participant};" /Users/xxx/Desktop/KENODATA/MISE.txt | cut -f 2 -d';')
var_resultat=$(egrep -i "^${participant} " /Users/xxx/Desktop/KENODATA/RESULTATSTATS_UTF8.txt | cut -f 3 -d' ')

echo $participant '=>' $((var_mise - var_resultat)) '€'

done > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt



#converti l'encodage format UTF-8 en UTF-16 afin affiché le symbole "€" dans la fenetre du RECAP (puis renomme MISEGAIN2.txt en MISEGAIN.txt)
iconv -f 'UTF-8' -t 'UTF-16' "/Users/xxx/Desktop/KENODATA/MISEGAIN.txt" > "/Users/xxx/Desktop/KENODATA/MISEGAIN2.txt"
mv "/Users/xxx/Desktop/KENODATA/MISEGAIN2.txt" "/Users/xxx/Desktop/KENODATA/MISEGAIN.txt"

Capture_d_e_cran_2018_08_21_a_08_22_19.png
 
Dernière édition:
Je repense a truc.

cette ligne
Bloc de code:
 echo $participant '=>' $((var_mise - var_resultat)) '€'

elle prends la mise du tirage effectué moins (-) le gain du tirage effectué et sauvegarde le resultat de la soustraction dans MISEGAIN.txt. C'est la procedure pour 1 tirage.

MAIS, on veut connaitre la balance sur l'ensemble des tirages depuis le N°1 (Nb Tirage Historique:)

il faut ajouter les resultats des nouveaux calculs (var_mise - var_resultat) aux resultats deja existants dans MISEGAIN.txt

C'est pas evident par texte de bien me faire comprendre :-/
 
Poste un exemple (une ligne) pour une personne des différents fichiers ainsi que le calcul que tu veux faire. Ce sera plus simple
 
Démonstration pour 1 personne et pour 1 tirage.
On va faire ultra simple. 1 tirage/jour

Explication pas a pas.

NOTE :
Le fichier MISEGAIN.txt contient la balance des mises (qu'on soustrait) + gains (qu'on additionne)


JOUR #1
Lundi midi (avant le tirage)
je joue 4 grilles d'une mise de 1€/grille
(le fichier MISE.txt contient "@magnetico;4" ) .....<---- Donc c'est OK

Lundi midi (après le tirage)
je gagne 50€ (1 grille a 50 € + 3 grilles perdues)
(le fichier RESULTATSTAS.txt contient "MAGNETICO > 50 €".....<---- Donc c'est OK

Le fichier MISEGAIN.txt contient :
magnetico => - 4 € .....<---- Donc c'est faux

Le fichier MISEGAIN.txt devrait contenir :
magnetico => 46 €
(46 € = 4 € de mise + 50€ de gains, cela fait un bénéfice de 46€)


JOUR #2
Mardi midi (avant le tirage)
je joue 4 grilles d'une mise de 1€/grille
(le fichier MISE.txt contient "@magnetico;8" ) .....<---- Donc c'est OK (8€ car 4€ du lundi + 4€ du mardi)

Mardi midi (après le tirage)
je gagne 50€ (1 grille a 50 € + 3 grilles perdues)
(le fichier RESULTATSTAS.txt contient "MAGNETICO > 100 €".....<---- Donc c'est OK (100€ car 50€ du lundi + 50€ du mardi)

Le fichier MISEGAIN.txt contient :
magnetico => - 8 € .....<---- Donc c'est faux

Le fichier MISEGAIN.txt devrait contenir :
magnetico => 92 €
(92 € = 50€ (gain de lundi) + 50 € (gain de lundi), - 8 € de mise (le cumul des mises de lundi (4€) + mise de mardi (4€))

ou ce qui revient au meme
(92 € = - 8 € de mise (le cumul des mises de lundi (4€) + mise de mardi (4€)) + 50€ (gain de lundi) + 50 € (gain de lundi)


ainsi de suite pour tous les tirages suivants....

Le fichier MISEGAIN.txt contient la balance des gain/mises.
il est necessaire d'additionner/soustraire pour chaque tirage,

:)
 
Dernière édition:
Donc la version avec cette modification fonctionne bien correctement.
Dans ce cas, juste inverser mise et résultat dans le calcul ne serait-il pas suffisant ?
Bloc de code:
echo $participant '=>' $((var_resultat - var_mise)) '€'

Ton problème vient du format du fichier MISE ou du fichier RESULTATSTATS.
Je vais voir si je trouve quoi ;)
 
Trouvé, c'est bien le UTF16 qui posait problème :)

Bloc de code:
file *

LOGNOMBRETIRAGE.txt:          ASCII text
LOGTIRAGE.txt:                UTF-8 Unicode text
MISE.txt:                     ASCII text
MISEGAIN.txt:                 Big-endian UTF-16 Unicode text
NUMTIRAGE.txt:                ASCII text
PODIUM.txt:                   Big-endian UTF-16 Unicode text
RESULTATS.txt:                Big-endian UTF-16 Unicode text
RESULTATSHISTORIQUE.txt:      Big-endian UTF-16 Unicode text
RESULTATSHISTORIQUE_UTF8.txt: UTF-8 Unicode text
RESULTATSSMS.txt:             UTF-8 Unicode text
RESULTATSSMS2.txt:            UTF-8 Unicode text, with very long lines, with no line terminators
RESULTATSTATS.txt:            Big-endian UTF-16 Unicode text
RESULTATSvocal.aiff:          IFF data, AIFF-C compressed audio
RESULTATSvocal.mp3:           Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v2,  56 kbps, 22.05 kHz, Monaural
RESULTATSvocal.txt:           UTF-8 Unicode text
TOP1.txt:                     Big-endian UTF-16 Unicode text
TOP3.txt:                     Big-endian UTF-16 Unicode text, with no line terminators
keno.html:                    HTML document text, UTF-8 Unicode text, with very long lines
mygames.txt:                  ASCII text
mygames_full.txt:             ASCII text

Cette version devrait te donner le bon résultat :
  1. Conversion du RESULTATSTATS de UTF16 vers UTF8 (comme tu as essayé de faire)
  2. Calcul dans le sens "var_resultat - var_mise"
Avec les fichiers de ton "KENODATA2.zip" ça semble bien marcher.

Bloc de code:
## Soustraction de  MISE - GAIN
liste_participant=$(cut -f 1 -d';' /Users/xxx/Desktop/KENODATA/MISE.txt | sed 's/^@//')
iconv -f 'UTF-16' -t 'UTF-8' "/Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt" > "/Users/xxx/Desktop/KENODATA/RESULTATSTATS_UTF8.txt"

for participant in $liste_participant
do

var_mise=0
var_resultat=0

var_mise=$(grep -i "@${participant};" /Users/xxx/Desktop/KENODATA/MISE.txt | cut -f 2 -d';')
var_resultat=$(egrep -i "^${participant} " /Users/xxx/Desktop/KENODATA/RESULTATSTATS_UTF8.txt | cut -f 3 -d' ')

echo $participant '=>' $((var_resultat - var_mise)) '€'

done > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt
 
ahhhhh :)

Je remplace l'ancien code avec le nouveau.
Je fais un reset de tous les fichiers a partir de ce midi.
On verra bien ce que ca donne ici (normalement pareil)

C'est quoi cette notion de "Big-endian" ? Je l'ai deja vu pas mal de fois

Merci
 
@ecatomb

Je reviens vers toi pour te rendre compte.
Tout semble baigner dans l'huile :)

Il me reste juste a convertir une copie de MISEGAIN.txt (en UTF16 pour afficher le symbole "€" correctement.
Sans convertion, je vois ca :
Capture_d_e_cran_2018_08_22_a_15_57_13.png
 
Pour la convertion, je propose

Bloc de code:
iconv -f 'UTF-16' -t 'UTF-8' "/Users/xxx/Desktop/KENODATA/MISEGAIN.txt" > "/Users/xxx/Desktop/KENODATA/MISEGAIN_UTF8.txt"
 
Donc un petit iconv vers un autre fichier (misegain_utf16?) et ce sera bon

Plutôt celui-ci et le fichier utf16 à utiliser sur ton site
Bloc de code:
Code (Text):
iconv -f 'UTF-8' -t 'UTF-16' "/Users/xxx/Desktop/KENODATA/MISEGAIN.txt" > "/Users/xxx/Desktop/KENODATA/MISEGAIN_UTF16.txt"