Surveiller un fichier / Timer ? | |
steph_rebol | 27-Jun-2010/23:34:53+2:00 |
Bonjour J ai encore besoin de quelques infos que je ne trouve pas avant de me lancer pour de bon. Dans mon projet j ai besoin de surveiller un fichier, savoir s il a été modifié. Pour cela, en delphi, à l aide d un timer je verifie la date de la derniere modif et si elle est differente de la date stockée, j effectue un traitement. Bon ok il y a peut etre (tres certaineement mieux mais mon niveau fait que là je peux pas faire mieux ) Dois-je proceder de la même maniere en rebol ou existe t il une fonction qui s en charge ? merci pour vos conseils | |
Didec | 28-Jun-2010/10:25:35+2:00 |
Salut, Oui, Rebol sait gérer des timers, mais il ne sait le faire nativement que sur des éléments d'une fenêtre View. Autrement dit, il faut que le programme ai une interface graphique. S'il n'affiche rien, pas de timer ! Voici comment : http://www.rebol.com/how-to/feel.html#section-15 Un petit exemple vaut mieux qu'un long discours : Rebol [] ; le répertoire à tester. 'dirize assure qu'il se termine par un "/" rep: dirize %/c/windows/ verif-rep: has [contenu] [ if not empty? contenu: read rep [ print [now/time "Il y a quelquechose dans" rep ":" newline contenu] ] ] view layout [ title (join "Vérif de " rep) rate 0:1 feel [ engage: func [face action event] [ if action = 'time [verif-rep] ] ] ][/code] [code]Rebol [] rep: %/c/Mon-repertoire verif-rep: does [ | |
Didec | 28-Jun-2010/10:26:42+2:00 |
Désolé, posté un peu vite, je recommence pour le code.Rebol [] ; le répertoire à tester. 'dirize assure qu'il se termine par un "/" rep: dirize %/c/windows/ verif-rep: has [contenu] [ if not empty? contenu: read rep [ print [now/time "Il y a quelquechose dans" rep ":" newline contenu] ] ] view layout [ title (join "Vérif de " rep) rate 0:1 feel [ engage: func [face action event] [ if action = 'time [verif-rep] ] ] ] | |
Philippe | 28-Jun-2010/14:06:21+2:00 |
Bonjour, J'ai retrouvé dans mes archives un script qui surveillait l'état d'une liste de site (un clone d'un script de RT, de mémoire). Tu peux modifier l'objet test-http pour faire en sorte de vérifier par exemple la date du fichier (modified? %mon-fichier ou modified? my-url ) au lieu de faire un "search" dedans. REBOL [ Title: "Check Sites" Needs: [view 1.3.2] ] time-out: 5 ; Seconds to wait for the connection (adjust it!) poll-time: 00:00:06 ; devrait être relatif au nbre de sites du fait du "read" system/schemes/default/timeout: system/schemes/http/timeout: time-out sites: [ ; Liste : 1 ligne = 1 block = [1 URL + 1 label + 1 keyword ] (http or tcp are allowed) [ http://www.yahoo.fr "Yahoo.fr" "html" ] [ http://www.google.com "Google.com" "html" ] ] test-http: make object! [ ping: func [ url [url!] {fonction pour tester les urls et leurs contents si pas /search : renvoie soit l'erreur, soit le contenu de la page si /search et un mot-clé : renvoie true si le mot-clé est trouvé, false sinon} /search kwd /local test val ][ test: either error? err: try [ val: read url ][ mold disarm :err ][val] if search [ test: either find/last test kwd [true][false] ] return test ] ] ; end test-http ; ------ layout ----------------------------------- img: make image! [150x15 0.0.0.255] draw img [ pen coal fill-pen linear 0x0 0 44 89 1 1 silver gray coal silver box 8.0 0x0 149x14 ] out: [ backeffect [gradient 0x1 black coal] ; c'est poller qui sert de timer pour checker les sites poller: txt 0x0 "" rate poll-time feel [ engage: func [f a e] [ if find [time] a [ check-sites ] ] ] ] foreach site sites [ ;port: make port! site/1 append out compose/deep [ image img (site/2) [check-site face] [browse face/data] with [ data: (copy site/1) font/size: 10 font/style: 'bold font/shadow: none font/align: 'center font/valign: 'middle user-data: (copy site/3) ] ] ] append out [ across pad 0x100 text "Polling : " white font-size 10 frequency: rotary coal 99x14 data [ "0.1 minute" "0.5 minute" "1 minute" "5 minutes" "15 minutes" "30 minutes" ] effect [ draw [pen coal fill-pen linear 0x0 0 44 89 1 1 silver gray coal silver box 9.0 0x0 99x14 ] ] edge [size: 0x0 color: coal effect: none] font [ name: "Verdana" style: none ; 'bold size: 10 color: 255.255.255 offset: 2x2 space: 0x0 align: 'center valign: 'middle shadow: none ;1x1 colors: [255.255.255 coal] ] [ val: 60 * to-decimal (first parse frequency/data/1 "") poller/rate: to-time val show poller ] return pad 0x10 across ; c'est le bouton refresh qui sert de timer. refresh: btn 70 93.155.216 "Refresh" font-color white [ check-sites ] pad 7x0 btn 70 "Quit" 166.0.0 [quit] font-color white ; loggy: txt rejoin [" next test : " test-heure ] ] color-face: func [face color] [ face/effect: reduce ['colorize color] show face ] check-site: func [face /local col-face] [ color-face face gray color-face face col-face: either attempt [ test-http/ping/search face/data face/user-data][green][red] ] check-sites: does [ foreach face out/pane [ if face/style = 'image [check-site face] ] ] out: layout out view/new/options center-face out [no-title no-border] check-sites do-events ===Philippe | |
steph_rebol | 28-Jun-2010/23:05:53+2:00 |
merci, je vais etudier cela avec attention mais c est tout de même tres deroutant ce language... Le plus dur est je crois faire abstraction de mes connaissances en Pascal, mais reflexes obliges, c est pas evident... | |
Didec | 29-Jun-2010/9:51:58+2:00 |
Le plus déroutant c'est la notion de "dialecte". Par exemple, dans le code que je t'ai donné plus haut, il faut bien avoir à l'esprit que ce qui se trouve dans le block! qui suit le mot 'layout est un dialecte (le "VID") qui permet de décrire une interface graphique. On peut y trouver des mots qui ont alors un sens différent que celui qu'ils peuvent avoir dans un autre dialecte, ou dans du code. Pour faire un parallèle, le mot "table" à un sens différent selon son contexte. Si on parle de mobilier, c'est un meuble. Si on parle d'interface graphique, c'est une sorte de grille, si on parle de base de données, c'est un élément structuré de cette BDD, si on parle mathématique, on pense multiplications... Dans le dialecte VID, on peut aussi définir des fonctions utilisées pour personnaliser le comportement de l'interface graphique. C'est le cas de ce qui se trouve dans le block suivant le mot 'feel. "feel" est un mot du dialecte VID indiquant que ce qui suit est une redéfinition d'une ou plusieurs fonctions appelées par les événements de l'interface. On est alors en permanence en train de changer de contexte de pensée. Le code Rebol est en fait un dialecte "do" (du nom de la fonction qui interprète le code. Et lors de l'exécution de ce code, on utilise d'autres dialectes (comme le "VID") qui peuvent eux mêmes contenir du dialecte "do"... Cette notion est très puissante au niveau programmation, mais elle a comme revers d'exiger de celui qui lit le code de connaitre ces sous-langages afin de comprendre ce qu'il lit. Mais il suffit d'apprendre les rudiments de chaque dialecte au fur et à mesure de ses besoins. Ce n'est pas si compliqué. La 1ère étapes est de connaitre les mots qui bascule vers l'utilisation d'un de ces dialecte (layout, parse, secure, ...). | |
Login required to Post. |