Calcul différence MISE et GAIN (projet RECAP)

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)


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:

C'est vrai que ça bug lorsqu'on essaie d'écrire dans un fichier utilisé en entrée (même s'il y a un redirection entre temps).
La version suivante fonctionnera mieux :
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.tmp" && mv "/Users/xxx/Desktop/KENODATA/mygames_full.tmp" "/Users/xxx/Desktop/KENODATA/mygames_full.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 ?

Ce n'est pas obligé si cela t'arrange. Il faudra juste créer un script utilisant tes deux fichiers et calculant la différence:
  • Pour enlever le @ en début de ligne : echo "@magnetico" | sed 's/^@//'
  • Pour transformer du texte en majuscule ou minuscule : la commande tr permet de faire ça
Je te laisse tester :
Bloc de code:
echo symbol | tr [a-z] [A-Z]
echo SYMBOL | tr [A-Z] [a-z]

Il te reste à trouver comment calculer la différence mais tu devrais pouvoir te passer des deux idées précédentes que j'ai eu :D
Un truc de ce style devrait être un bon début :
Bloc de code:
var_mise=0
var_resultat=0

var_mise=$(grep -i "MICROSEB" MIDI.txt | cut -f 2 -d';')
var_resultat=$(grep -i "MICROSEB" RESULTATSTATS.txt | cut -f 3 -d' ')

echo $((var_mise - var_resultat))
 
Merci.

Je vais surtout m'interesser a

Bloc de code:
var_mise=0
var_resultat=0

var_mise=$(grep -i "MICROSEB" MIDI.txt | cut -f 2 -d';')
var_resultat=$(grep -i "MICROSEB" RESULTATSTATS.txt | cut -f 3 -d' ')

echo $((var_mise - var_resultat))

Il ne reste plus qu'a faire la soustraction (pour chaque pseudo) et hooooop, c'est terminé.
 
La soustraction est déjà là, c'est le echo de la fin ;)
Il te reste à récupérer tous les participants dans une liste et de l'utiliser pour faire le grep. Pourquoi pas reprendre le cut de ma partie pour le faire :D

Par contre, c'est pas optimisé vu qu'on va parcourir plein de fois les fichiers...
 
J'ai inclus les dernieres lignes de code au code existant.

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"
#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
var_mise=0
var_resultat=0

var_mise=$(grep -i "MICROSEB" /Users/xxx/Desktop/KENODATA/MISE.txt | cut -f 2 -d';')
var_resultat=$(grep -i "MICROSEB" /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt | cut -f 3 -d' ')

echo $((var_mise - var_resultat))

sleep 10


J'ai vu que le calcul s'effectue pour MICROSEB (j'ai pas vérifié si c'est exact ou pas (on verra en reel).
 
"Il te reste à récupérer tous les participants dans une liste"

Ce qui m'echappe (surement car je ne connais pas la commande dédiée) c'est :
• Comment faire correspondre la mise qui se trouve dans MISE.txt et le gain (RESULTATSTATS.txt) au meme pseudo.
J'entends par la, comment faire que le gain de magnetico ne soit pas deduit la mise de microseb ou tout autre membre ????? :banghead:
Bref, comment attribuer au bon membre les mises et gains qui lui appartiennent
 
Avec une liste fait manuellement :D

Ou alors, tu la crée à partir d'un de tes fichiers :
Bloc de code:
liste_participant=$(cut -f 1 -d';' MIDI.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=$(grep -i "$participant" /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt | cut -f 3 -d' ')

echo $((var_mise - var_resultat))

done

Cela me donne ça (test avec ton exemple de fichier "MIDI.txt" et "RESULTATSTATS.txt" )
Bloc de code:
Alex => -4
Elsie => -12
magnetico => 85
microseb => -59

Perso, ça ne me plait pas trop comme solution car la structure des fichiers n'est pas adéquat pour ton projet mais ça semble bien marcher :)

ps: quelques fois il m'arrive de reprendre mes scripts automatisant ce genre d'action à partir de 0. Au final, cela me permet d'avoir quelque chose de plus simple, robuste et plus rapide.
C'est ce qui m'a permis de faire un curl plus poussé (quasi celui que je t'ai donné). Je me sers de ça pour formater diverses données au format que je veux. Je m'en sert aussi pour récupérer en auto des journaux gratuits (plutôt que de passer 5min via leur site) :rolleyes:


[Edit] Un gros truc à ne pas oublier, entre le fichier qui stocke les données et l'affichage, il peut y avoir des différences. Il faut donc en profiter et mettre des informations supplémentaire ou un format plus utile (d'où les fichiers csv simples à utiliser : tu caches les parties à ne pas afficher)
 
Dernière édition par un modérateur:
@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 ?

Tu avais mis MIDI.txt ici :D
 
Je de tester

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"
#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=$(grep -i "$participant" /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt | cut -f 3 -d' ')

echo $((var_mise - var_resultat))

done

sleep 10

Ca donne
Capture_d_e_cran_2018_08_19_a_19_06_03.png


Je ne vois pas le pseudo du membre en face du decompte :-/
Ca devrait ressembler a
PSEUDO DECOMPTE

par exemple
magnetico 10
elsie -23
microseb 67
etc...
 
Oups, mauvais copier-coller de ma part ...
Cette version est celle que j'ai testé :
Bloc de code:
echo $participant '=>' $((var_mise - var_resultat))
 
En attendant, j'avais essayé
Bloc de code:
echo $((liste_participant var_mise - var_resultat))
, evident, ca marchait pas

merci

Niveau affichage, c'est nickel
Capture_d_e_cran_2018_08_19_a_19_16_28.png


Reste a voir en reel si tout ca correspond bien a la réalité des mises/gains.
 
La double parenthèse permet d'effectuer des calculs simples si précédée par un $
 
Un petit detail concernant la sortie vers fichier texte

Je fais
Bloc de code:
echo $participant '=>' $((var_mise - var_resultat)) > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt

ca me donne le fichier MISEGAIN.txt comme convenu, mais je ne retrouve que le dernier peseudo traité.
Capture_d_e_cran_2018_08_19_a_19_22_00.png


Et si je fais
Bloc de code:
[code]echo $participant '=>' $((var_mise - var_resultat)) >> /Users/xxx/Desktop/KENODATA/MISEGAIN.txt
maintenant ca cumul sans fin
Capture_d_e_cran_2018_08_19_a_19_23_55.png


La meilleure solution est-elle de couper le texte juste après le dernier pseudo traité ?

Faut vraiment que je vois ca en reel, car (je n'en suis pas sur) mais y'a une subtilité dans le calcul mise-gain...
Si je mise 5 €, et que j'ai aucun gain, ma balance devrait etre -5 € (puisque je perds 5€)
Si au prochain tirage je mise 5 €, et que je gagne 10 €, ma balance devrait etre de 5 € (-5€ perte + - 5€ de mise + 10 € de gain = +5 €
 
Dernière édition:
Un seul ">" signifie que tu rediriges la sortie en écrasant ce qu'il y avait dans le fichier.
Deux ">>" signifie que tu rediriges la sortie en ajoutant à la fin du fichier.

Soit tu supprimes le "MISEGAIN.txt" et tu utilise ta version avec les deux ">>"
Soit tu mets ton "> /Users/xxx/Desktop/KENODATA/MISEGAIN.txt" derrière le "done" pour écrire le résultat de la boucle for et non une ligne en particulier ;)

Bloc de code:
done > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt
 
Bloc de code:
done > /Users/xxx/Desktop/KENODATA/MISEGAIN.txt

Ah oui c'est vrai. J'ai du mal quand même :-/

Merci :)
 
@ecatomb

je viens de tester en reel, concernant le calcul mise - gain.

C'est bien ce qui me semblait, y'a une petite erreur.

Le resultat qui se trouve dans le fichier MISEGAIN.txt
alex => 5 €
elsie => 9 €
magnetico => 5 €
microseb => 8 €

En realité les chiffres du dessus, affichent les mises. Etant donné que seule Elsie a fait 2 € de gain, ca devrait être

alex => -3 € (il a misé 5 € et retouche seulement 2 €)
elsie => -9 €
magnetico => -5 €
microseb => -8 €

Est ce que vois d'ou vient le pb ?

Pour memoire je te met le code qui calcul mise - gain
Bloc de code:
############################################################################################
##############  MISEGAIN (calcul MISE - GAIN pour avoir la balance  )##############
############################################################################################
# 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=$(grep -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

### -------------------------------------------------------------------------------------------------------------------------------------------------
 
Etant donné qu'on ne peut pas modifier un texte posté après quelques minutes, je suis obligé de reposter comme suit :

Deux erreurs dans mon post précédent :

a la phrase "Etant donné que seule Elsie a fait 2 € de gain, ca devrait être" , c'est "alex" et pas "elsie"

voici le bon texte
Le resultat qui se trouve dans le fichier MISEGAIN.txt
alex => -5 €
elsie => -9 €
magnetico => -5 €
microseb => -8 €


Je reformule donc le probleme :
En realité les chiffres du dessus, affichent les mises. Etant donné que seule Alex a fait 2 € de gain, ca devrait être

alex => -3 € (il a misé 5 € et retouche seulement 2 €)
elsie => -9 €
magnetico => -5 €
microseb => -8 €
 
Dernière édition:
Je n'ai rien compris...

Normalement, Mise - gain = balance des comptes

je viens de tester en reel, concernant le calcul mise - gain

C'est bien ce qui est calculé :p

Peux-tu donner un exemple de fichier MISE.txt, RESULTATSTATS.txt et ce que tu veux obtenir ?

Dans tes derniers postes, tu donnes un résultat sans rapport avec les données que tu as donné plus tôt ... C'est comme demander de l'aide pour cuisiner un plat en disant qu'il me manque quelques chose mais sans dire ce que tu as déjà fait et ce que tu cherches à avoir :D
 
Reprenons... C'est simple :)

Un joueur mise 5 €, il valide son ticket et paie (l'argent est désormais parti a la FDJ) , au tirage ses jeux lui rapportent 2 €, il se fait rembourser les tickets gagnants, il a maintenant 2 € dans sa poche, sa balance est donc - 3€ (que l'on affiche - 3€ (-5€ de mise + 2 € de gain = - 3 €)

autre exemple

Un joueur mise 10 €, il valide son ticket et paie (l'argent est désormais parti a la FDJ) , au tirage ses jeux lui rapportent 25 €, il se fait rembourser les tickets gagnants, il a maintenant 25 € dans sa poche, sa balance est donc de + 15€ (que l'on affiche + 15€ (-10€ de mise + 25 € de gain = +15 €)

La mise c'est toujours le joueur qui la paie, elle donc a déduire dans tous les cas

la règle c'est : on retire la mise, on ajoute le gain (si y'en a)
ou ce qui revient au même on ajoute le gain et retire la mise.

Ici l'intégralité du dossier KENODATA
https://workupload.com/file/qQZ2skJ3
 
Dernière édition: