#26 Le 14/02/2017, à 06: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, à 08:35
- metalux
Re : [Résolu]Comment imprimer un chiffre sur deux dans une suite numérique?
Merci à vous 2, c'est nickel.
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, à 09: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
évidemment, là, c'est pas visible.
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.
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, à 09:16)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#29 Le 14/02/2017, à 22: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:
Par contre en terminal, c'est Ok et avec la couleur en prime
J'ai remplacé ^[ par \033 car je n'ai pas compris "obtenu avec Ctrl-V [ " (Ctrtl-V me fait un coller?)
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
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 ) si un jour tu passes en Bretagne.
Hors ligne
#30 Le 15/02/2017, à 08: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, à 09: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, à 09:34)
Hors ligne
#32 Le 23/02/2017, à 15: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:
Hors ligne
#33 Le 24/02/2017, à 17: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 24/02/2017, à 23: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, à 01: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, à 01:20)
Hors ligne
#36 Le 25/02/2017, à 08: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, à 09: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, à 12:56)
Hors ligne
#38 Le 26/02/2017, à 09: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