Compter occurrence et addition de données

Bloc de code:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge"><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o||n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({1:[function(e,n,t){function r(){}function o(e,n,t){return function(){return i(e,[c.now()].concat(u(arguments)),n?null:this,t),n?void 0:this}}var i=e("handle"),a=e(2),u=e(3),f=e("ee").get("tracer"),c=e("loader"),s=NREUM;"undefined"==typeof window.newrelic&&(newrelic=s);var p=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],d="api-",l=d+"ixn-";a(p,function(e,n){s[n]=o(d+n,!0,"api")}),s.addPageAction=o(d+"addPageAction",!0),s.setCurrentRouteName=o(d+"routeName",!0),n.exports=newrelic,s.interaction=function(){return(new r).get()};var m=r.prototype={createTracer:function(e,n){var t={},r=this,o="function"==typeof n;return i(l+"tracer",[c.now(),e,t],r),function(){if(f.emit((o?"":"no-")+"fn-start",[c.now(),r,o],t),o)try{return n.apply(this,arguments)}finally{f.emit("fn-end",[c.now()],t)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,n){m[n]=o(l+n)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,c.now()])}},{}],2:[function(e,n,t){function r(e,n){var t=[],r="",i=0;for(r in e)o.call(e,r)&&(t[i]=n(r,e[r]),i+=1);return t}var o=Object.prototype.hasOwnProperty;n.exports=r},{}],3:[function(e,n,t){function r(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(o<0?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=r},{}],4:[function(e,n,t){n.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(e,n,t){function r(){}function o(e){function n(e){return e&&e instanceof r?e:e?f(e,u,i):i()}function t(t,r,o,i){if(!d.aborted||i){e&&e(t,r,o);for(var a=n(o),u=m(t),f=u.length,c=0;c<f;c++)u[c].apply(a,r);var p=s[y[t]];return p&&p.push([b,t,r,a]),a}}function l(e,n){v[e]=m(e).concat(n)}function m(e){return v[e]||[]}function w(e){return p[e]=p[e]||o(t)}function g(e,n){c(e,function(e,t){n=n||"feature",y[t]=n,n in s||(s[n]=[])})}var v={},y={},b={on:l,emit:t,get:w,listeners:m,context:n,buffer:g,abort:a,aborted:!1};return b}function i(){return new r}function a(){(s.api||s.feature)&&(d.aborted=!0,s=d.backlog={})}var u="nr@context",f=e("gos"),c=e(2),s={},p={},d=n.exports=o();d.backlog=s},{}],gos:[function(e,n,t){function r(e,n,t){if(o.call(e,n))return e[n];var r=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[n]=r,r}var o=Object.prototype.hasOwnProperty;n.exports=r},{}],handle:[function(e,n,t){function r(e,n,t,r){o.buffer([e],r),o.emit(e,n,t)}var o=e("ee").get("handle");n.exports=r,r.ee=o},{}],id:[function(e,n,t){function r(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="nr@id",a=e("gos");n.exports=r},{}],loader:[function(e,n,t){function r(){if(!x++){var e=h.info=NREUM.info,n=d.getElementsByTagName("script")[0];if(setTimeout(s.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&n))return s.abort();c(y,function(n,t){e[n]||(e[n]=t)}),f("mark",["onload",a()+h.offset],null,"api");var t=d.createElement("script");t.src="https://"+e.agent,n.parentNode.insertBefore(t,n)}}function o(){"complete"===d.readyState&&i()}function i(){f("mark",["domContent",a()+h.offset],null,"api")}function a(){return E.exists&&performance.now?Math.round(performance.now()):(u=Math.max((new Date).getTime(),u))-h.offset}var u=(new Date).getTime(),f=e("handle"),c=e(2),s=e("ee"),p=window,d=p.document,l="addEventListener",m="attachEvent",w=p.XMLHttpRequest,g=w&&w.prototype;NREUM.o={ST:setTimeout,SI:p.setImmediate,CT:clearTimeout,XHR:w,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var v=""+location,y={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1044.min.js"},b=w&&g&&g[l]&&!/CriOS/.test(navigator.userAgent),h=n.exports={offset:u,now:a,origin:v,features:{},xhrWrappable:b};e(1),d[l]?(d[l]("DOMContentLoaded",i,!1),p[l]("load",r,!1)):(d[m]("onreadystatechange",o),p[m]("onload",r)),f("mark",["firstbyte",u],null,"api");var x=0,E=e(4)},{}]},{},["loader"]);</script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="forum de pronos du jeu Keno">
        <meta name="author" content="Free-bb">
        <link rel="icon" href="http://forum.free-bb.com/favicon.ico">
        <title>KenoPronos</title>
        <link rel="stylesheet" href="/css/fc.min.css" />
 
Peut-être que tu as des espaces dans tes nombres ? Je ne sais pas si cela pose problème ou non. Dans le doute rajoute ceci après la ligne du substr (en espérant ne pas me tromper) :
Bloc de code:
gsub(" ","",gain)

Dans le cas contraire, pourras-tu m'envoyer le fichier avec tous les gains que j'analyse ça ce soir ?
 
  • J’aime
Réactions: symbol
Ecatomb,

Je crois que l'erreur vient de moi, j'ai laissé un ancien fichier avec des resultats antérieurs, du coup, le calcul a pris ces resultats et les additionnés aux nouveaux, ce qui a donné des montants inexacts.

Je vais voir avec les prochains résultats, si les nouvelles sommes s'additionnent correctement.
 
N’hésites pas à tester l’autre version de mon script qui trie les gagnants. Cela les affiche sur plusieurs ligne mais ce sera peut-être plus joli à voir sur ton forum
 
  • J’aime
Réactions: symbol
1) Pour le tirage de ce midi (et parfois d'autres tirages), il n'y pas de gagnant.
Le script principal affiche alors la phrase "PAS DE GAGNANT pour ce tirage !"

Capture_d_e_cran_2018_07_09_a_16_31_37.png


Du coup ta partie du script (la partie qui calcul les gains en €), considère "PAS DE GAGANT pour ce tirage" comme un pseudo, de fait, lui attribu alors 0 € de gain.
Serait-il possible d'ajouter une ligne de code pour éviter cela (c'est a dire ne pas afficher "PAS DE GAGANT pour ce tirage"+GAIN) ?

2) La version V2 du script affiche les pseudos+gains verticalement (ce qui est très bien aussi). Mais, Je ne vois pas ou je pourrais caser ces lignes :-/ la page est deja pas mal chargée.

3) Autre petite chose purement esthetique -> Le classement (PSEUDO+GAIN) se fait par ordre croissant, mais basé sur le pseudo et pas sur le gain.
Est-il possible de faire le classement par ordre du gain le plus important au moindre.


Merci

PS : J'essai d'etre le plus précis possible dans mes explications, ce qui peut générer des repétitions, et un excès de précision! :)
 
Dernière édition:
La v2 fait un classement par gain ;)
Je regarderais plus en détail tes différents points ce soir
 
en attendant quelques modif d'Ecatomb,

Je change un peu la "mise en page" du forum.
Pour consulter le "GAIN CUMULES 100 DERNIERS TIRAGES", ca se situe au dessus de la fenetre du RECAP, suffira de cliquez sur l'icone € (ca ouvrira une fenetre avec le classement selon le script V2 (verticale).
L'ancien affichage sous le RECAP disparait (ou alors peut etre afficher seulement les 3 plus gros PSEUDO+GAIN), je sais pas encore :)
 
Remplace la fin par ceci. Ce devrait être quasi ce que tu veux
Bloc de code:
awk 'END {
  printf "%s:%s\n",joueur,tableau[joueur]
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" | tr "\n" " " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
 
J'ai remplacé les dernieres lignes par tes 3 lignes, ce qui donne (j'ai pas trop d'indication sur quoi remplacer exactement).

Bloc de code:
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
# creation d'un fichier vide RESULTATSTATS.txt
> /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
# ajout de GAINS DES 100 DERNIERS TIRAGES:  avec retour chariot
echo "GAINS DES 100 DERNIERS TIRAGES: " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt


    # compte combien occurence d'un même pseudo
#    awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c | sort -r -n | tr -d '\n' > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt


#v2
# Donne :
#MAGNETICO   34 €
#ELSIE   34 €
#MICROSEB   14 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
awk 'END {
  printf "%s:%s\n",joueur,tableau[joueur]
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" | tr "\n" " " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt

### -------------------------------------------------------------------------------------------------------------------------------------------------

Je me retrouve avec une erreur
Bloc de code:
awk: syntax error at source line 18
context is
     >>>  <<<
awk: bailing out at source line 18
 
Oups, enlève le awk en trop ^^
Remplace :
Bloc de code:
awk 'END {

Par :
Bloc de code:
END {
 
Il n'y pas plus d'erreur, mais j'ai uniquement MAGNETICO 102 euro(s) dans le fichier RESULTATSTATS.txt alors que fichier RESULTATSHISTORIQUE.txt contient plein de pseudo et gain

Si tu veux voir les fichiers en temps reel http://kenopronos.free-bb.eu/
 
Dernière édition:
Il faut que j’aille dormir ...
Cette fois, ça doit être bon
Bloc de code:
END {
  for (joueur in tableau)
  {
    printf "%s:%s\n",joueur,tableau[joueur]
  }
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" | tr "\n" " " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
 
Fais le quand tu as le temps et l'envie, tu passe deja beaucoup de temps la dessus. Bonne et nuit et merci :)

MAJ: Après test, ca semble OK avec le code donné en dernier. :up:
 
Après 50 tests, tout semble fonctionner nickel.

Y'a juste le classement par ordre de gain (du plus important au plus faible) qui a disparu.
Si eventuellement c'est possible le remettre.

Merci

Le dernier code validé est :
Bloc de code:
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
# creation d'un fichier vide RESULTATSTATS.txt
# > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt



#v2
# Donne :
#MAGNETICO   34 €
#ELSIE   34 €
#MICROSEB   14 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
END {
  for (joueur in tableau)
  {
    printf "%s  > %s   Euro(s)\n",joueur,tableau[joueur]
  }
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGNANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
 
d'avoir ajouté ">" ca suffit pour empecher le tri :-/

Je remets
Bloc de code:
    printf "%s:%s\n",joueur,tableau[joueur]
 
Dernière édition: