Calcul différence MISE et GAIN (projet RECAP)

symbol

Membre actif
13 Octobre 2004
536
25
Bonjour a tous,

Dédié plus spécialement a (Ecatomb, Zeltron54, DaffyB)

Dans la liste des fichiers texte contenant des données sotckées dans le dossier KENODATA, il y 'a "mygame.txt" qui est le fichier contenant la liste des jeux du tirage a venir, des membres.

J'aimerais compter combien chaque joueur a misé.

- En sachant qu'une ligne = 1 € (par défaut)
- Dans le cas particulier, si le joueur indique "_X(2,3,4,5,6,7,8,9,10) a coté de son pseudo, cela indique qu'il mise 2,3,4,5,6,7,8,9,10 € pour cette grille.

------------------------------------------------------------------------------------------
exemple d'un membre qui mise 5€ : @bob_X5 22-45-32-47
------------------------------------------------------------------------------------------

Le but de cela, est de faire une balance du gain/mise.

- Est-il possible de compter pour chaque membre le total de sa mise, puis sauvegarder ca dans un fichier ?

@ecatomb, tu as produit du code pour compter les gains de chaque membre, ca ne devrait pas être si différent (sauf qu'ici pas de chiffre a additionner mais des lignes. (sauf si "_X")

Voici l'exemple de mise pour ce soir :

Bloc de code:
@magnetico 11-13-14-15-36-50
@magnetico 11-12-13-14-15-52
@magnetico 11-13-14-15-35-54
@magnetico 11-13-14-15-48-56
@magnetico 11-13-14-15-23-58
@microseb 08 12 20 21 29 36 37 57 67
@microseb 08 12 20 28 34 36 37 42 57
@microseb 05 08 12 20 36 37 57 61 69
@microseb 08 12 20 36 37 42 53 57 65
@microseb 08 12 15 20 36 37 42 50 57
@microseb 02 06 08 12 16 20 36 37 57
@microseb 08 12 20 36 37 48 52 57
@microseb 08 12 20 36 37 51 57 64 69
@alex 09 38 40 50 59 69 70
@alex 09 20 38 40 50 59 69
@alex 09 19 20 38 50 59 70
@alex 19 20 38 40 50 59 69
@alex 09 10 19 38 59 69 70
@elsie 27 28 29 38 47 49
@elsie 27 29 37 38 47 49
@elsie 27 29 38 39 47 49
@elsie 27 29 38 47 48 49
@elsie 27 29 47 49 28 37 38
@elsie 27 29 47 49 38 39 38
@elsie 27 29 47 49 28 48 38
@elsie 27 29 47 49 37 39 38
@elsie 27 29 47 49 37 48 38
@elsie 27 29 47 49 39 48 38


Un autre fichier RESULTATSTATS.txt quand a lui contient les gains cumulés des membres.
Bloc de code:
MICROSEB > 21 € 
ALEX > 4 €

Normalement, Mise - gain = balance des comptes

Si quelqu'un entrevois une solution (si c'est techniquement possible).

Merci :)
 
Dernière édition:
Dans ton exemple de "mygame.txt" les numéros de magnetico sont séparés par des tirets mais pas les numéros des autres ?
Est-ce normal ?

Perso, je préfère avoir un fichier de base au format csv pour travailler.
Exemple :
Bloc de code:
joueur;mise;numéro 1;numéro 2;numéro 3;numéro 4;numéro 5;numéro 6
@magnetico;1;11;13;14;15;36;50
@magnetico;1;11;12;13;14;15;52
@magnetico;1;11;13;14;15;35;54
@magnetico;1;11;13;14;15;48;56
@magnetico;1;11;13;14;15;23;58
@microseb;1;08;12;20;21;29;36;37;57;67
@microseb;1;08;12;20;28;34;36;37;42;57
@microseb;1;05;08;12;20;36;37;57;61;69
@microseb;1;08;12;20;36;37;42;53;57;65
@microseb;1;08;12;15;20;36;37;42;50;57
@microseb;1;02;06;08;12;16;20;36;37;57
@microseb;1;08;12;20;36;37;48;52;57
@microseb;1;08;12;20;36;37;51;57;64;69
@alex;1;09;38;40;50;59;69;70
@alex;1;09;20;38;40;50;59;69
@alex;1;09;19;20;38;50;59;70
@alex;1;19;20;38;40;50;59;69
@alex;1;09;10;19;38;59;69;70
@elsie;1;27;28;29;38;47;49
@elsie;1;27;29;37;38;47;49
@elsie;1;27;29;38;39;47;49
@elsie;1;27;29;38;47;48;49
@elsie;1;27;29;47;49;28;37;38
@elsie;1;27;29;47;49;38;39;38
@elsie;1;27;29;47;49;28;48;38
@symbol;67;11;12;13;14;15;16
@elsie;1;27;29;47;49;37;39;38
@elsie;1;27;29;47;49;37;48;38
@elsie;1;27;29;47;49;39;48;38
1ère colonne le nom, puis la mise (1€ ou plus), ensuite les numéros.
J'ai rajouté à ton exemple un joueur qui est certain de gagner vu qu'il mise 67€ :D

A partir d'un fichier de ce type, ce sera très simple de calculer la mise. Même si cela ne prendra pas trop de temps en plus avec la version actuelle.
En tout cas, j'ai remarqué que le nombre de numéro varie d'une ligne à l'autre ...

ps: il faudrait un jour que tu fasses un récapitulatif de tes différents sujets sur ton jeu :)
 
Concernant le format des numéros postés dans le forum , il y a 2 facons : soit avec un "-" ou "vide", mais jamais autres chose.
Le nombre de numéro qui compose une "grille" varie, il va de 2 a 10 (jamais moins ou plus)

Juste pour info :
Il y a 70 N°, 20 N° parmi les 70 sont tirés au sort.

Si vous jouez une grille de 6 N° et que ces 6 sont tirés au sort (parmi les 20), vous remportez 1000€ pour une mise de 1€

RAPPORT pour 1€
--------------------------
N° trouvés --> Gain
2/2 --> 2€
3/3 --> 6€
4/4 --> 50€
5/5 --> 100€
6/6--> 1000€
7/7--> 3000€
8/8--> 10 000€
9/9--> 40 000€cash ou 2000€/an A VIE
10/10--> 200 000€ cash ou 10 000€/an A VIE
(pour 1 grille de 10 N° avec mise 10 € --> 2 000 000 € CASH ou 100 000€/an A VIE)

Le plus gros gain possible est 20 000 000 € (10/10 mise 10 € avec multiplicateur X10)
Il y a une option au keno, c'est le multiplicateur (tiré au hasard parmi X1, X2, X3, X4, X5, X10)

Il y a aussi des gains intermediaires.

dm_1361702616_KenoGAV_tableau_des_gains_et_multiplicateur.jpg
 
Dernière édition:
As-tu toujours un espace après la mise du joueur si elle est indiquée dans ton fichier ?
 
Si je comprends bien la question, la réponse est oui, il y a toujours une espace entre @pseudoESPACEN°-N°-N°-N°
Pour les mises autres que 1€, c'est @pseudo_X5ESPACEN°-N°-N°-N°
 
Bloc de code:
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 < "mygame.txt" | awk -F';' '
  {
    tableau[$1]=tableau[$1]+$2
  }
  END {
    for ( joueur in tableau ) {
      printf "%s;%s\n",joueur,tableau[joueur]
    }
  }' | sort > "mise.txt"

Résultat avec ton fichier de test :
Bloc de code:
@alex;5
@elsie;10
@magnetico;5
@microseb;8

La partie du while crée un fichier csv de ce type à partir de ton txt (le 1 sera remplacé par le nombre correspondant s'il y a un "_X" :
Bloc de code:
@magnetico;1
@magnetico;1
@magnetico;1
@magnetico;1
@magnetico;1
@microseb;1
@microseb;1
@microseb;1
@microseb;1
@microseb;1
@microseb;1
@microseb;1
@microseb;1
@alex;1
@alex;1
@alex;1
@alex;1
@alex;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1
@elsie;1

Le awk s'occupe de calculer la some des mises à partir de ce csv
Le sort c'est juste pour avoir les noms dans l'ordre.

A noter que si tu as un nom se finissant par un espace suivi d'un (ou plusieurs) chiffre, ça ne fonctionnera pas bien. C'est impossible à gérer avec ton type de fichier source.

Il te reste à rediriger cela vers ton fichier final contenant les mises
 
Merci Ecatomb,

Je vais bien regarder le code pour en saisir toutes les subitilités.
Concernant les pseudos qui se présenteraient sous la forme PSEUDO(escape)chiffre, ce n'est pas permis dans le forum.
 
Dernière édition:
Je viens de tester, c'est foormiiiidable :)


Actuellement le contenu du fichier mise.txt vidé a chaque lancement.

Pour avoir le total des mises sur le long terme, est-il possible d'additionner les mises (pour chaque joueur) ?

Le but final étant d'ajouter les mises, déduire les gains (ou ajouter les gains et déduire la mise, ce qui revient au même) pour savoir combien chaque joueur a gagné ou perdu (en €).
 
Il te suffit de concaténer les "mygame.txt" à chaque participation :
Bloc de code:
cat "mygame.txt" >> "mygame_full.txt"

Ensuite tu passes la commande avec ce fichier. Ne pas oublier de le supprimer pour repartir de zéro
 
Merci Ecatomb,

Je vais tester cet aprem :)

MAJ :
Je viens de tester ca fonctionne très bien.
1) A chaque lancement les nouveaux pronos sont ajoutés a la suite dans le fichier "mygames_full.txt" (peut être va t-il falloir mettre une limite au nombre de pronos sauvegarder dans ce fichier).
La contenance du fichier peut-elle est limitée a 5000 pronos stockés (soit 5 pronos pour 10 personne pendant 100 tirages ? (de memoire c'est head ou tail la commande..)

2) le script s'occupe d'additionner les mises de chacun, et sauvegarder le résultat des additions.

Voici le code adapté :
Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" >> "/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"

sleep 40
 
Dernière édition:
Un petit truc qui me tracasse.

L'ajout des nouvelles données dans mygame_full.text se fait a la suite du texte deja existant (c'est a dire en bas).
Alors comment ne conserver que les 5000 derniers pronos ?
Si c'etait ajouté en haut du texte, ca serait facile de limiter a 5000 lignes (on compte du haut vers le bas, les plus anciennes étant naturellement supprimées avec "tail -5000"), mais vu que c'est ajouté en bas, comment faire ? :-/
Je me demande si y'a pas besoin de SED :-/
 
Dans ce cas, le plus simple est de faire quelque chose comme ceci :
Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | head -5000 > "/Users/xxx/Desktop/KENODATA/mygames_full.txt"

Les nouvelles lignes seront au début, et on n'en garde que 5000 max.
 
Avant ta réponse, Je m'etais permis de ca

Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" >> "/Users/xxx/Desktop/KENODATA/mygames_full.txt"

cat "/Users/xxx/Desktop/KENODATA/mygames_full.txt" >> "/Users/xxx/Desktop/KENODATA/mygames_fulltemp.txt"
head -5000 /Users/xxx/Desktop/KENODATA/mygames_fulltemp.txt > /Users/xxx/Desktop/KENODATA/mygames_full.txt
rm -f /Users/xxx/Desktop/KENODATA/mygames_fulltemp.txt
 
Au debut, je pensais, que tu additionnerais le nombre de pronos (par membre) contenu dans mygames.txt, sauvegardais uniquement les resultats des additions dans MISE.txt (sous la forme pseudo;XX, puis recommencais au prochain pronos postés. ca éviterais d'avoir un fichier intermédiaire "mygame_full.txt"

donc, si j'ai bien saisi, tu ajoutes a la suite les pronos de mygames.txt dans mygames_full.txt (jusqu'a limite de 5000 lignes), puis additionne le total des mises (par membre) de mygames_full.txt, et sauvegarde le resultats des additions dans MISE.txt
 
Le résultat sous la forme pseudo;XX est renvoyé directement à la commande awk. Je ne le stocke nul part, mais on pourrait si cela t'arrange :)

La partie suivante affiche le contenu du nouveau fichier mygames.txt puis le contenu du mygames_full.txt
Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" "/Users/xxx/Desktop/KENODATA/mygames_full.txt"
Le head permet de ne conserver que les 5000 premières lignes.

C'est assez proche de ta version ;)

Je pense que tu dois avoir en main de quoi avancer sur ton sujet même si les fichiers sur lesquels je fais les opérations ne sont pas forcément les bons.
Je préfère attendre la suite parce que j'ai un peu de mal à suivre ce que tu fais :D
 
Ah !, ca vous semble compliqué ou mal défini.
Comme d'hab, j'ajoute, j'empile, je mélange :)... Une sorte de brouet macédonien
 
Y'a un souci avec cette version :
Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | head -5000 > "/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"

sleep 40

Si je lance le script 2 fois (ou plus) les pronos dans " mygames.txt"ne sont plus ajoutés dans "mygames_full.txt", le total des mises dans MISE.txt restent identiques.

pire, si je lance la commande :
Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" "/Users/xxx/Desktop/KENODATA/mygames_full.txt" > "/Users/xxx/Desktop/KENODATA/mygames_full.txt"
je me retrouve avec un fichier de 895 megas (mygames_full.txt)
 
Dernière édition:
Il me semble que la bonne syntaxe est

Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" >> "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | head -5000 >> "/Users/xxx/Desktop/KENODATA/mygames_full.txt"

au lieu de
Bloc de code:
cat "/Users/xxx/Desktop/KENODATA/mygames.txt" "/Users/xxx/Desktop/KENODATA/mygames_full.txt" | head -5000 > "/Users/xxx/Desktop/KENODATA/mygames_full.txt"

:coucou:
 
Je souhaite supprimer "@" et remplacer ";" par " : " dans le fichier MISE.txt. (exemple. "@magnetico;2" devient "magnetico : 2" )

Voici ce que j'ai mis, mais je suis certain qu'on peut faire mieux en plus court. :-/

Bloc de code:
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
 
@ecatomb

Finalement, ma requête concernant supprimer "@" et remplacer ";" par " : " est inutile.


Donc, maintenant, on a 2 fichiers :
MIDI.txt qui contient le total des mises (pour chaque membre)
dans ce format:
@Alex;2
@Elsie;2
@magnetico;85
@microseb;2



RESULTATSTATS.txt qui contient le total des gains (pour chaque membre)
dans ce format:
MICROSEB > 61 €
ELSIE > 14 €
ALEX > 6 €

Question :
Pour faire la soustraction mise - gain , est-il necessaire de convertir le format de RESULTATS.txt afin d'avoir le même que MIDI.txt ?
 
Dernière édition: