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.

#2126 Le 01/06/2010, à 22:55

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Putain, mais qu’est-ce qui m’a pris de ne pas emporter mon chargeur… ><'

Bon, et bien je ne vais pas trop pouvoir être loquace…
Si Ouranos a encore besoin d’aide pour recoder une fonction de string.h, je ne pourrai pas l’aider… ou alors demain. big_smile

Bonne nuit (mais je ploperai à 3h tongue).


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2127 Le 01/06/2010, à 23:02

helly

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#2128 Le 01/06/2010, à 23:22

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

strlen :

#include <string.h>

size_t      strlen(const char *str)
{
  size_t    len;

  len = -1;
  while (str[++len] != '\0');
  return (len);
}

Rien de plus simple smile .
Mais bon, pour la GNU libc, les dev se sont dit que pour des grands mots, ça serait cool de faire les comparaison par paquet de 4 bits...
S'ils ont fait ce choix, on peut se dire que c'est légitime...
Code source : http://tsunanet.net/~tsuna/strlen.c.html.

Mais bizarrement, les dev d'OpenBSD préfèrent la comparaison caractère par caractère...
Ce qui peut laisser penser que du coup, c'est pas si légitime que ça, les perfs gagnées doivent pas être suffisantes pour qu'ils daignent l'intégrer à leur libc...
Code source : http://ftp.bsdfrog.org/pub/OpenBSD/src/sys/lib/libsa/strlen.c

Dernière modification par gnuuat (Le 01/06/2010, à 23:28)


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#2129 Le 01/06/2010, à 23:31

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bon, j'ai réussi à squatter un w$... Mais ça me fait terriblement au cul de ne pas pouvoir utiliser une typographie correcte. En plus je ne peux même pas coder pour passer le temps, comme je n'ai pas de sytème de  gestion de version ou de synchronisation. roll Et en plus il n'y a pas de dictionnaire français installé.
Bon, je cesse de me plaindre, et j'y vais. smile


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2130 Le 01/06/2010, à 23:34

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Le projet BSD, fidèle à lui-même, a pour lui la clarté du code smile (clarté qui y est pour beaucoup dans le faible nombre de failles découvertes).

Après en terme d'efficacité je ne sais pas laquelle est meilleures.Faudrait faire des benchs (et encore, je ne sais pas si quelque chose de vraiment intéressant en ressortirait).
De plus, il existe une "instruction" (pas sûr, c'est peut-être bien une macro-instruction) en asmx86 qui peut faire un strlen (enfin, faut faire l'instru + un SUB et c'est bon) donc là aussi, quid de l'efficacité et du code final généré par le compilo ?

Sinon, vous en avez probablement entendu parler mais GCC va intégrer du C++ dans son code (la discussion sur la ML est plutôt intéressante).

Hors ligne

#2131 Le 01/06/2010, à 23:42

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bonsoir les codeurs fous tongue


Hello world

Hors ligne

#2132 Le 01/06/2010, à 23:46

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Cela ne risque-t-il pas de casser la logique du "je programme dans le langage X, mon compilateur est en X et il s'est compilé lui même" ?
Enfin, cette logique, c'est plus de l'esthétisme que du fonctionnel, après s'ils pensent que GCC gagnerait à avoir de l'objet, ça reste plausible (bien que ce ne soit pas un remède à tous les maux, l'objet a quand même son utilité).

edit : hmm... Plutôt que de dire des trucs qui semblent fausses, je vais finir le bg de mon perso D&D -_- .

Dernière modification par gnuuat (Le 01/06/2010, à 23:49)


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#2133 Le 01/06/2010, à 23:53

Кຼزດ

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

SELECT Dodo
FROM Plop
    WHERE Points = 'Pas beaucoup'
;


dou

Hors ligne

#2134 Le 01/06/2010, à 23:56

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

gnuuat a écrit :

Enfin, cette logique, c'est plus de l'esthétisme que du fonctionnel, après s'ils pensent que GCC gagnerait à avoir de l'objet, ça reste plausible (bien que ce ne soit pas un remède à tous les maux, l'objet a quand même son utilité).

Je te renvoie pour voir le "débat". Bon de toute façon c'est déjà décidé (par la FSF et le "comité de direction" de GCC), mais il y a des gens ne voient pas vraiment l'apport du C++ dans ce cas, par exemple on peut très bien faire de l'OO "propre" en C (Cf. GTK+), et donc il y a débat. C'est intéressant à suivre pour se faire son propre avis.

Dernière modification par grim7reaper (Le 02/06/2010, à 00:01)

Hors ligne

#2135 Le 01/06/2010, à 23:57

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

mathieuI a écrit :

SELECT Dodo
FROM Plop
    WHERE Points = 'Pas beaucoup'
;

SELECT `dodos`.`plop`
FROM `dodos`
WHERE (`dodos`.`name` = 'gnuuat');

Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#2136 Le 02/06/2010, à 00:00

nesthib

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

smile

GMT+3


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#2137 Le 02/06/2010, à 00:04

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

+------+
| PLOP |
+------+

Hello world

Hors ligne

#2138 Le 02/06/2010, à 00:13

tshirtman

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

mensonges! on ne peut rien coder de propre en C, et encore moins de l'objet…

idem pour le C++ de toutes façons!


















tongue

Dernière modification par tshirtman (Le 02/06/2010, à 00:13)

Hors ligne

#2139 Le 02/06/2010, à 00:51

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

tshirtman a écrit :

mensonges! on ne peut rien coder de propre en C, et encore moins de l'objet…

idem pour le C++ de toutes façons!


















tongue

Je plussoie, avec du C on arrive à faire du Python, ce qui rpouve que c'est pas propre du tout tongue .


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#2140 Le 02/06/2010, à 01:08

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bn night :

echo 'plop' > /dev/stdout

Dernière modification par gnuuat (Le 02/06/2010, à 01:08)


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#2141 Le 02/06/2010, à 01:08

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

C'est n'imp ces médisances sur le C. Par contre, je ne pas trop quoi penser de l'introduction de C++ dans les sources de gcc. hmm

Bon, j'y vais sinon je vais me faire engueuler parce que je vous cause en même temps. ^^


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2142 Le 02/06/2010, à 03:59

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Just at time !


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2143 Le 02/06/2010, à 08:42

Compteur du TdCCT

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Scores totaux, depuis le début :

1) 400    samuncle
2) 333    nesthib
3) 299    Pylade
4) 283+5  grim7reaper
5) 239    mathieuI
6) 183    cm-t
7) 137    helly
8) 106    ǤƦƯƝƬ
9) 103    gnuuat
10) 80    tshirtman
11) 70    petifrancais
12) 37    ilagas
13) 35    Ouranos999
14) 25    GentooUser
14) 25    pierguiard
16) 19    Le Rouge
17) 18    Ph3nix_
18) 14    Kanor
19) 12    stratoboy
19) 12    kouskous
21) 10    CROWD
21) 10    keny
23) 7    Lagierl
23) 7    sailing
25) 6    Toineo
25) 6    Mornagest
25) 6    Zeibux
28) 5    xapantu
29) 4    danychou56
29) 4    Neros
29) 4    Biaise
32) 3    Р'tite G☢gole :mad:
33) 1    ceric
33) 1    pfriedK
33) 1    geenux

chart?chs=675x280&cht=p3&chco=ff0000,ffff00,008000,000080,8000ff&chf=bg,s,808080&chl=00h%20-%2000h59|01h%20-%2001h59|02h%20-%2002h59|09h%20-%2009h59|10h%20-%2010h59|12h%20-%2012h59|13h%20-%2013h59|15h%20-%2015h59|19h%20-%2019h59|20h%20-%2020h59|21h%20-%2021h59|23h%20-%2023h59&chd=t:9,4,2,2,3,1,1,1,4,1,1,3&chtt=R%C3%A9partition%20des%20posts&chts=cccccc,12chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,10&chxr=1,0,10&chf=b0,lg,0,803300,0,ffcc80,1|bg,lg,90,cccccc,0,808080,0.9&chxl=0:|05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04h&chxp=0,0.7,4.9,9.1,13.2,17.3,21.5,25.6,29.8,33.9,38,42.2,46.3,50.5,54.6,58.8,62.9,67,71.2,75.3,79.4,83.6,87.7,91.8,96&chd=t:0,0,0,0,2,3,0,1,1,0,1,0,0,0,4,1,1,0,3,9,4,2,0,0&chm=N,803300,0,-1,12&chtt=Nombre%20de%20posts%20par%20heure&chts=cccccc,12

Dernière modification par Compteur du TdCCT (Le 03/06/2010, à 15:19)


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#2144 Le 02/06/2010, à 08:42

Compteur du TdCCT

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Scores de la période en cours :


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#2145 Le 02/06/2010, à 11:21

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Le fail.

Il n'a pas aimé le changement de mois hmm ?

Hors ligne

#2146 Le 02/06/2010, à 12:12

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

grim7reaper a écrit :

Le fail.

Il n'a pas aimé le changement de mois hmm ?

Je crois bien. Bon, j’ai intérêt à avoir appris le python d’ici le mois suivant pour comprendre pourquoi il s’est planté.
Ce n’est pas qu’il n’a pas pu ouvrir le fichier, car je ne l’ai pas supprimé, mais j’ai fait un « echo -n > count10days ».

On verra ça plus tard.

En attendant :

1) 10    Pylade
2) 6    gnuuat
2) 6    nesthib
4) 5    grim7reaper
4) 5    samuncle
4) 5    tshirtman
7) 4    mathieuI
7) 4    helly

“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2147 Le 02/06/2010, à 12:40

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Ou alors tu fais ton compteur en C...


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#2148 Le 02/06/2010, à 13:01

tshirtman

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Mets un score bidon à  0 dedans, il aime pas les fichier vide…

(oui c'est un bug dans le compteur)

Hors ligne

#2149 Le 02/06/2010, à 18:44

nany

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bonjour chez vous.

Pylade a écrit :
grim7reaper a écrit :

Le fail.

Il n'a pas aimé le changement de mois hmm ?

Je crois bien. Bon, j’ai intérêt à avoir appris le python d’ici le mois suivant pour comprendre pourquoi il s’est planté.
Ce n’est pas qu’il n’a pas pu ouvrir le fichier, car je ne l’ai pas supprimé, mais j’ai fait un « echo -n > count10days ». [ … ]

tshirtman a écrit :

Mets un score bidon à  0 dedans, il aime pas les fichier vide…

(oui c'est un bug dans le compteur)

#!/usr/bin/env python
# encoding: utf-8 

# auteur Gabriel Pettier
# license GPL V3 or later

# sert uniquement a compter les points sur ce topic :http://forum.ubuntu-fr.org/viewtopic.php?pid=938704
# et donc probablement inutile a quiquonque vu que mon serveur se charge de le lancer tous les matins
# publié a seul but de vérification par les interressés. ;), peut aussi servir si mon serveur n'est plus là
# pour assurer le service un jour.

# nécessite python 2.4 minimum, python-beautifulsoup et python-mechanize.

# le fichier '.compteur_logins' doit contenir le login du posteur sur la première ligne, et son mot de passe
# sur la deuxième (cela et seulement cela).

from BeautifulSoup import BeautifulSoup
import urllib2
import re
import time
import sys
import ClientForm
import mechanize as ClientCookie

#ignoreList = ('ArkSeth','compteur-couche-tards','fergo','pdas','Compteur_couche_tards','compteur-couche-tard') #TdCT
ignoreList = ('ArkSeth','Compteur du TdCCT','Chuck Norris','oracle_bot') #TdCCT

class Day:
    """un jour dure de 21h à 5h du matin exclu ([21h:5h[) il contient la derniere entrée (points) de ce jour pour chaque joueur"""
    def __init__(self):
        self.entries={}

    def addEntry(self, entry):
        #plus simple de faire un try except que de verifier que l'entrée existe. :/
        try:
            self.entries[entry.name] = max(self.entries[entry.name],entry.date.points())
        except:
            self.entries[entry.name] = entry.date.points()

    def __str__(self):
        for entry in self.entries.items():
            print entry,'+',entries[entry]

def utcFrance():
    return 1 + time.localtime(time.time())[-1] #1 + 1 si on est a l'heure d'été


class Date:
    def __init__(self,tuple=(20,0),utc=utcFrance()):
        self.h = (int(tuple[0])-utcFrance()+24+utc)%24
        self.m = int(tuple[1])

    def points(self):
        if self.m in range(60):
            if self.h in range(21,24):
                return self.h - 20
            if self.h in range(3):
                return self.h + 4
            if self.h in [3,4]:
                return 10
        return 0

class Entry:
    def __init__(self,name='',date=Date(),edit=Date()):
        self.name = name
        self.date = max(date,edit)

    def setName(self, name):
        self.name = name

    def setDate(self, date):
        if date.points()>self.date.points(): self.date = date

class Score:
    def __init__(self, tuple):
        self.name = tuple[1]
        self.num = int(tuple[0])

    def __gt__(self, other):
        return self.num>other.num

    def __str__(self):
        return '%i    %s' %(self.num, self.name)

def getPage(url, entries, stat, urlscore):
    # essaye jusqu'a 15 fois de récupérer la page
    for i in range(15):
        try:
            page = BeautifulSoup(urllib2.urlopen(url))
            break
        except:
            if i==14: raise
            time.sleep(60)

    print 'page récupérée, travail en cours'
    for post in page.findAll('div','blockpost rowodd')+page.findAll('div','blockpost roweven'):
        str_date = str(post.find('h2').find('span').find('a')).split('>')[1]
        if (str_date.split(' ')[0] in ['Hier'] and int(str_date.split(' ')[2].split('<')[0].split(':')[0]) in range(5,24)) or (str_date.split(' ')[0] in ["Aujourd\'hui"] and int(str_date.split(' ')[2].split('<')[0].split(':')[0]) in range(5)):
            urlscore = url
            try:
                entry = Entry(str(post.find('div','postleft').find('a')).split('>')[1].split('<')[0])
            except:
                entry = Entry(str(post.find('div','postleft').find('strong')).split('>')[1].split('<')[0])

            if str_date.split(' ')[2].split('<')[0].split(':')[0] not in stat:
                stat[str_date.split(' ')[2].split('<')[0].split(':')[0]] = 1
            else:
                stat[str_date.split(' ')[2].split('<')[0].split(':')[0]] += 1

            utc = utcFrance()
            if 'GMT' in str(post):
                try:
                    utc = int(str(post).split('GMT')[-1].split(' ')[0].split('<')[0])
                except:
                    print entry.name,'-> no good GMT!'
            entry.setDate(Date(str_date.split(' ')[2].split('<')[0].split(':'),utc))

            if post.find('p','postedit') is not None:
                try:
                    entry.setDate(Date(str(post.find('p','postedit').find('em')).split('à')[1][1:6].split(':'),utc))
                except:
                    print 'error ->'+str(str(post.find('p','postedit').find('em')).split('à'))
            #on ne veut pas les points des pseudos dans ignoreList
            if entry.name not in ignoreList and (entry.date.points() is not 0): entries.addEntry(entry)

    # erreur si le topic fait moins d'une page de long,FIXME!
    #result = int(url.split('p=')[1]) < int(str(page.findAll('a')[-7]).split('p=')[1].split('"')[0]) #en espérant que le nombre de liens en bas de page ne change pas! :/
    if str(page.find('p','pagelink conl')).split('conl">')[1].split('</p')[0].split(str(page.find('p','pagelink conl').find('strong'))) == ['', '']:
        result = False
    else:
        result = int(url.split('p=')[1]) < int(str(page.find('p','pagelink conl').findAll('a')[-2]).split('p=')[1].split('"')[0])
    #FIXED!
    if not result:
        # on vérifie si le sujet est fermé, auquel cas on renvoie le dernier lien fourni sur la page
        if 'Sujet ferm&eacute;' in ''.join((str(i) for i in page.findAll('p','postlink conr'))):
            print str(page.findAll('div','postmsg')[-1])
            result = str(page.findAll('div','postmsg')[-1].findAll('a')[-1]).split('"')[1]
    return result, urlscore

def renderstats(stats):
    if stats != {}:
        DayStats = {'00': 0, '01': 0, '02': 0, '03': 0, '04': 0, '05': 0, '06': 0, '07': 0, '08': 0, '09': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0}
        DayStats.update(stats)
        HoursBar = 'h|'.join(sorted(DayStats.keys()))+'h'
        HoursBar = HoursBar[20:]+'|'+HoursBar[:19]
        HoursBar = HoursBar[0:len(HoursBar)-1]
        HoursPie = 'h|'.join(sorted(stats.keys()))+'h'
        for k in stats.keys():
            HoursPie = HoursPie.replace(k+'h', k+'h%20-%20'+k+'h59')

        DataBar = ','.join([str(DayStats[x]) for x in sorted(DayStats.keys())])
        DataBar = ','.join(DataBar.split(',')[5:24])+','+','.join(DataBar.split(',')[0:5])
        Vmax10 = str(10*(int(max([DayStats[x] for x in DayStats.keys()]))/10+1))
        urlimage='[img]http://chart.apis.google.com/chart?chs=675x280&cht=p3&chco=d80020,d88000,ffd840,20d820,2080ff,101080,a020d8&chf=bg,s,c0c0c0&chl='+HoursPie+'&chd=t:'+','.join([str(stats[x]) for x in sorted(stats.keys())])+'&chp=1.6&chtt=R%C3%A9partition%20des%20posts&chts=606060,16[/img]'

        urlimage+='[img]http://chart.apis.google.com/chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,'+Vmax10+'&chxr=1,0,'+Vmax10+'&chf=b0,lg,0,803000,0,ffc080,1|bg,lg,90,e8e8e8,0,c0c0c0,0.9&chxl=0:|'+HoursBar+'h'+'&chxp=0,0.7,4.9,9.1,13.2,17.3,21.5,25.6,29.8,33.9,38,42.2,46.3,50.5,54.6,58.8,62.9,67,71.2,75.3,79.4,83.6,87.7,91.8,96&chd=t:'+DataBar+'&chm=N,803000,0,-1,12&chtt=Nombre%20de%20posts%20par%20heure&chts=606060,16[/img]'
        return urlimage

    return None

def post(_file, stats, debug):
    # le fichier '.compteur_logins' doit contenir le login du posteur sur la première ligne, et son mot de passe sur la deuxième (cela et seulement cela).
    file = open('.compteur_logins','r')
    login = file.readline().split('\n')[0]
    password = file.readline().split('\n')[0]
    file.close()

    cookieJar = ClientCookie.CookieJar()

    opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cookieJar))
    opener.addheaders = [('User-agent','Mozilla/5.0 (compatible)')]
    ClientCookie.install_opener(opener)
    fp = ClientCookie.urlopen('http://forum.ubuntu-fr.org/login.php')
    forms = ClientForm.ParseResponse(fp)
    fp.close()

    form = forms[1]
    form['req_username'] = login
    form['req_password'] = password
    fp = ClientCookie.urlopen(form.click())
    fp.close()

    file = open('url','r')
    tid = file.readline().split('=')[1][:-2] # la première ligne contenant l'adresse du topic.
    file.close()
    fp = ClientCookie.urlopen('http://forum.ubuntu-fr.org/post.php?tid='+tid)
    forms = ClientForm.ParseResponse(fp)
    fp.close()

    form = forms[1]
    title = (((_file == 'count') and 'Scores totaux, depuis le début ') or 'Scores de la période en cours ')
    form['req_message']  = title+':&#91;code]'
    file = open(_file, 'r')
    scores=file.readlines()
    urlimage = renderstats(stats)
    stats = {}
    for i in range(len(scores)): #on veut toutes les lignes restantes
        if i == 0:
            tmpRange = 0
        elif scores[i].split(' ')[0] == scores[i-1].split(' ')[0]:
            pass
        else:
            tmpRange = i
        #et on ajoute la ligne avec le bon rang a l'entrée
        #form['req_message'] += (('Quelqu\'un' in scores[i] and '*** Vétéran des couche-tard, invaincu avant retraite ***\n') or '')+str(tmpRange+1)+') '+scores[i]+(('Quelqu\'un' in scores[i] and '******************************************************************************\n') or '') #TdCT
        form['req_message'] += str(tmpRange+1)+') '+(_file == 'count' and ((('grim7reaper' in scores[i] and scores[i].replace('    ', '+5  ').split('\n')[0]+' ** bonus +5 pour avoir répondu à ce post : ./viewtopic.php?pid=3486252#p3486252 **\n')) or scores[i]) or scores[i]) #TdCCT
    form['req_message'] += '&#91;/code]'+(urlimage or '')

    if debug:
        print form['req_message']
    else:
        fp = ClientCookie.urlopen(form.click())
        fp.close()

def main(urlfile, files):
    debug = False
    stats = {}
    f=open(urlfile,'r')
    url=urlscore=f.readline().split('\n')[0]
    f.close()
    entries = Day()

    while True:
        print 'lecture de la page '+url
        res = getPage(url, entries, stats, urlscore)
        urlscore = res[1]
        if not res[0]: break
        url=url.split('p=')[0]+'p='+str(1+int(url.split('p=')[1]))
        if res[0] is not True:
            url = res[0]+'&p=1'

    if not debug:
        f=open(urlfile,'w')
        f.write(urlscore+'\n')
        f.close()

    for file in files:
        f=open(file,'r')
        lines=(file=='count10days' and ((time.localtime()[2]==2 and ['0    '+entries.entries.keys()[0]+'\n']) or f.readlines()) or f.readlines())
        f.close()
        exp = re.compile('^[0-9]+\s*')
        scores = []
        print '\nlecture scores courants :\n', entries.entries.items()
        for line in lines:
            if line not in [' ','']:
                scores.append(Score([(line.split(' ')[0]),exp.split(line)[1].split('\n')[0]]))

        new_scores=[]
        for entry,num in entries.entries.items():
            for score in scores:
                if entry.lower() == score.name.lower(): 
                    score.num+=num
                    break
                if score is scores[-1]:
                    new_scores.append(Score([num,entry]))
                    break
        scores+=new_scores

        # vérification des doublons
        for nScore in range(len(scores)-1):
            for mScore in range(nScore+1,len(scores)-1):
                try:
                    if scores[nScore].name.lower() == scores[mScore].name.lower():
                        scores[nScore].num+=scores[mScore].num
                        del(scores[mScore])
                except:
                    pass
        scores.sort(reverse=True)
        if not debug:
            f=open(file, 'w')
            for score in scores:
                f.write('%s\n'%score)
            f.close()

        for i in range(15):
            try:
                post(file, stats, debug)
                stats = {}
                break
            except:
                if i == 14: raise
                time.sleep(60)

main('url',['count','count10days'])

Sauf erreur de copié-collé, ça doit marcher.

En ligne

#2150 Le 02/06/2010, à 19:41

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bon, on va faire un test avec cette nouvelle version pour demain…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne