Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 14/02/2017, à 07:40

Watael

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

quand je parlais de protéger les protections, c'est parce que (je ne l'avais pas remarqué jusque là) le comportement de awk n'est pas le même quand la chaîne est entre guillemets :

$ awk 'BEGIN{feb="f\\u00e9vrier";aug="Ao\\u00fbt"; gsub("\\u00e9","é",feb);gsub("\\u00fb","û",aug);print aug,feb}'
Ao\ût f\évrier
$ awk 'BEGIN{feb="f\\u00e9vrier";aug="Ao\\u00fbt"; gsub("\\\\u00e9","é",feb);gsub("\\\\u00fb","û",aug);print aug,feb}'
Août février

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#27 Le 14/02/2017, à 09:35

metalux

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Merci à vous 2, c'est nickel. smile
Il me reste à intégrer le N° joker et multiplicateur, je n'ai pas eu le temps de m'y attarder pour l'instant.
C'est bien plus compliqué que je le pensais comparé au Loto ou au Pmu.

Hors ligne

#28 Le 14/02/2017, à 10:04

Watael

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

#!/usr/bin/awk -f
BEGIN{ FS = "[{}]" }
/listDayTirage/{
    setRefTirage($2,$3);
    setRefTirage($4,$5);
}
/var tabTirages/{
gsub("\\\\u00e9","M-CM-)")
    n = split($0,tirage,"(}},|^var[^{]*{)");
    for(i=2;i<4;i++){
        sub("couronne.*","",tirage[i]);
        z = split(tirage[i],ar,"[{}]");
        for(y=1;y<=z;y++){
            gsub("\"","",ar[y])
            switch(ar[y]){
            # date
            case /^dhtir/ :
                gsub("dhtir:|,.*","",ar[y]);
                if(prevDate){
                   if(prevDate == ar[y]) delete ar[y]
                }else{
                    prevDate = ar[y]
                }
                reftirage = toupper(RefTirage[nT])
                if(ar[y]){
                    printf("^[[32m%s\n^[[31m%"int(29/2)+4"s^[[0m\n", ar[y],reftirage)
                }else{
                    printf("^[[31m%"int(29/2)+4"s^[[0m\n", reftirage)
                }
                break
            # numM-CM-)ros tirM-CM-)s
            case /^1/ :
                sub("^1:","",ar[y]);
                gsub(",*[0-9]*:"," ",ar[y]);
                m = split(ar[y],rslt," ")
                for(x=1;x<=m;x++){
                    fmt = x==m ? "%2d\n" : x%10 ? "%2d " : "%2d\n"
                    printf(fmt,rslt[x])
                }
                break
            # extra
            case /^,cplm/ :
                gsub("(.*plus:|,video.*multiplicateur)","",ar[y])
                split(ar[y],aar,"[:,]")
                printf("^[[01;36m%19s^[[0;36m %s\n^[[01;36m%19s ^[[0;36m%s^[[0m\n","Joker+:",aar[1],"multpl:",aar[2])
                break
            # nM-BM-0 tirage
            case /^[0-9]{7}:$/ :
                sub(":","",ar[y]);
                nT = ar[y];
                break
            }
        }
    }
}
function setRefTirage(numeroTirage,heure) {
    gsub("[\":,]","",numeroTirage);
    split(heure,H,"\"");
    RefTirage[numeroTirage]=H[4]
}
$ wget -qO- 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | ./resultats_Keno.awk 
Lundi 13 février 2017
              SOIR
 3  5  8 14 15 16 17 18 20 29
30 34 35 37 39 40 41 47 52 65
            Joker+: 0 810 621
            multpl: 2
              MIDI
 4  6  9 14 18 21 25 31 37 42
43 44 45 51 52 57 61 64 65 66
            Joker+: 4 002 656
            multpl: 1

j'ai mis de la couleur wink
évidemment, là, c'est pas visible. sad
les caractères ^[ n'en sont en fait qu'un seul (obtenu avec Ctrl-V [ ), il(s) peu(ven)t être remplacé(s) par \033, qui est portable.

edit :
on est quand même passé de "[Bash]Comment imprimer un chiffre sur deux dans une suite numérique?"
à tout un script en GNU/Awk. hmm
tu es très doué.
heureusement, c'était amusant, et on va recevoir quelques caisses de bières. \o/

Dernière modification par Watael (Le 14/02/2017, à 10:16)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#29 Le 14/02/2017, à 23:34

metalux

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Merci Watael mais dans le conky ça ne passe pas du tout, il y a trop de problèmes d'encodage:
1487107244.png

Par contre en terminal, c'est Ok et avec la couleur en prime smile
J'ai remplacé ^[ par  \033 car je n'ai pas compris "obtenu avec Ctrl-V [ " (Ctrtl-V me fait un coller?)

Watael a écrit :

on est quand même passé de "[Bash]Comment imprimer un chiffre sur deux dans une suite numérique?"
à tout un script en GNU/Awk. hmm
tu es très doué.
heureusement, c'était amusant, et on va recevoir quelques caisses de bières. \o/

Oui je suis très doué, je le sais cool
Non, c'est toi qui est particulièrement doué avec Gawk. Je pensais tout simplement qu'il y avait une solution toute simple comme ce que j'avais fais pour le Loto par exemple.
Pas de soucis pour boire une bière (ou quelques caisses tongue ) si un jour tu passes en Bretagne.

Hors ligne

#30 Le 15/02/2017, à 09:57

Watael

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

ah, conky n'aime pas les indications de couleurs ANSI.
je crois me souvenir que conky possède sa propre façon de définir la coloration du texte.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#31 Le 15/02/2017, à 10:31

MicP

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Bonjour

Un lien pour voir comment sont colorisées les sorties texte dans conky
Apparemment, les couleurs sont définies par des variables auxquelles on assigne une suite de 6 caractères hexadécimaux correspondants aux 3 octets définissant une valeur RGB (<=> Rouge Vert Bleu)

Dernière modification par MicP (Le 15/02/2017, à 10:34)

Hors ligne

#32 Le 23/02/2017, à 16:05

metalux

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Bonjour,
Pour la colorisation, ce n'est pas grave, je préfère faire un conky sobre tout en blanc. La vie n'étant pas toujours un long fleuve tranquille, je n'ai pas eu le temps de me pencher sur la syntaxe des scripts gawk (print, printf,etc...) aussi je me suis contenté d'ajouter vite fait une fonction comme tu me l'a conseillé Watael au post #19. Bon c'est certainement crade comme j'ai fais mais ça rempli la mission. Finalement seul le multiplicateur est suffisant, la personne ne jouant pas le N° Joker.
Voici le code, amusez vous à corriger la fonction Multi que j'ai ajouté si le cœur vous en dit car c'est pas très élégant avec 2 gsub.

#!/usr/bin/gawk -f
function setRefTirage(numeroTirage,heure) {
    gsub("[\":,]","",numeroTirage);
    split(heure,H,"\"");
    RefTirage[numeroTirage]=H[4]
}
function Print(n,dt,nb) {
    gsub(/\\u00e9/,"é",dt)
    gsub(/\\u00fb/,"û",dt)
    split(dt,tAr,"[:,]")
    gsub("\"","",tAr[2])
    if(prevDate){
        if(prevDate != tAr[2])print tAr[2]
    }else{
        prevDate=tAr[2]
        print tAr[2]
    }
    gsub("[\",:]","",n);
    print RefTirage[n]":"
    gsub(",*\"[^:]*:"," ",nb)
    m=split(nb,rslt," ")
    for(i=1;i<=m;i++){
        fmt = i==n ? "%2d" : i%10 ? "%2d " : "%2d\n"
        printf(fmt,rslt[i])
    }
}
function Multi(mult) {
    split(mult,tab,":")
    gsub("\"","",tab[5])
    gsub(",type","",tab[5])
    print "multiplicateur: ", tab[5]
}
BEGIN{
    FS="[{}]"
}
/listDayTirage/{
   setRefTirage($2,$3);
    setRefTirage($4,$5);
}
/var[[:blank:]]*tabTirages/{
    Print($8,$9,$10)
    Multi($11)
    print ""
    Print($2,$3,$4)
    Multi($5)
}

Merci encore pour tout, voici ce que donne le conky final en image:

1487858651.png

Hors ligne

#33 Le 24/02/2017, à 18:20

MicP

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Bonsoir

Je pense que tu dois pouvoir remplacer  :

    gsub("\"","",tab[5])
    gsub(",type","",tab[5])

par:

    gsub(/\"|,type/,"",tab[5])

Hors ligne

#34 Le 25/02/2017, à 00:28

metalux

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

J'ai essayé mais non, dans le conky j'ai alors
multiplicateur: 2,type au lieu de multiplicateur: 2

Hors ligne

#35 Le 25/02/2017, à 02:19

MicP

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Peut-être qu'en échappant la virgule qui est avant type :

    gsub(/\"|\,type/,"",tab[5])

(C'est vrai que j'ai eu la flemme de le tester en me connectant par le lien web…)

Dernière modification par MicP (Le 25/02/2017, à 02:20)

Hors ligne

#36 Le 25/02/2017, à 09:00

metalux

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Pas mieux, j'ai le même résultat.

Hors ligne

#37 Le 25/02/2017, à 10:47

MicP

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

J'ai pris le temps de tester celle là :

function Multi(mult) {
    split(mult,tab,",")
    split(tab[7],ch, ":")
    print "multiplicateur: ", ch[2]
}

=======

J'essayais de comprendre pourquoi il y avait un décalage entre les 2 x 10 colonnes si un des nombres n'avait qu'un seul chiffre,
mais j'ai compris que c'était une histoire de police de caractère.

Pour afficher ces séries il faudrait utiliser une police de caractère à chasse fixe,
mais je ne connais pas assez bien conky pour savoir comment faire.

Dernière modification par MicP (Le 25/02/2017, à 13:56)

Hors ligne

#38 Le 26/02/2017, à 10:52

metalux

Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?

Cette fois-ci c'est bon. Merci.

Hors ligne