Premier Script parse | |
tonic8 | 8-Jun-2007/10:38:32+2:00 |
Hello J'ai besoin de mettre en place un scripte qui cherche une ligne dans un fichier et qui remplace seulement la fin de la ligne. la ligne a chercher dans le fichier (une instruction par ligne) est: c:\program files\serveur\08062007.log Le truc c'est qu'il faut changer seulement la fin de la ligne pour permettre une rotation des logs. Je suppose qu'on doit faire une boucle utilisant read/lines (pour transformer chaque ligne en une data) puis de passer chaque ligne au parametre parse: mais comme la fin change il faut faire un truc comme [parse "c:\program files\serveur\*.log"] ou plus fin [parse "c:\program files\serveur\[date?].log"] puis de remplacer la ligne trouvé ["c:\program files\serveur\[now/date].log"] j'execute le script avec l'equivalent de winwin de cron Merci d'avance pour votre aide | |
Didec | 8-Jun-2007/11:15:37+2:00 |
En gros tu as une chaine au début (le chemin) puis des chiffres (toujours 8 ?) puis ".log" Donc quelquechose comme ça : a: { la ligne a chercher dans le fichier (une instruction par ligne) est: c:\program files\serveur\08062007.log Le truc c'est qu'il faut changer seulement la fin de la ligne pour permettre une rotation des logs. la ligne a chercher dans le fichier (une instruction par ligne) est: c:\program files\serveur\08062007.log Le truc c'est qu'il faut changer seulement la fin de la ligne pour permettre une rotation des logs. } ; On défini les chiffres : digit: charset "0123456789" ; Ici il faut construire la nouvelle valeur qui va remplacer les anciennes : new-date: "NouvelleValeur" parse/all a [ any [thru "c:\program files\serveur\" d: some digit f: ".log" skip 4 (f: change/part d new-date f) :f]] probe a halt | |
tonic8 | 8-Jun-2007/15:23:02+2:00 |
Yep tout bon merci dans mon script je remplace: new-date: "NouvelleValeur" par new-date: now/date mais la commande now/date me sors 6-jun-2007 il y a une option pour avoir le format YYYYMMDD ou DDMMYYYY comem ca mon script est reutilisable sur le meme fichier de conf ? | |
guest2 | 8-Jun-2007/15:36:38+2:00 |
Oui l'option qui existe, c'est tape Rebol avec tes doigts: >>pour YYYYMMDD to-string(now/year * 100 + now/month * 100 + now/day) >>pour DDMMYYYY to-string(now/day * 100 + now/month * 10000 + now/year) | |
tonic8 | 8-Jun-2007/15:50:11+2:00 |
Yep tout bon merci dans mon script je remplace: new-date: "NouvelleValeur" par new-date: now/date mais la commande now/date me sors 6-jun-2007 il y a une option pour avoir le format YYYYMMDD ou DDMMYYYY comem ca mon script est reutilisable sur le meme fichier de conf ? | |
tonic8 | 10-Jun-2007/16:52:59+2:00 |
Hello merci Guest2 C'est curieux comme methode mais elle marche, je n'avais pas du tout chercher dans cette direction. je pensais un modifier un truc comme set system/options/time: YYYYMMDD. Mais ton truc est plus simple... Par contre en re-analysant le fichier a modifier, je me suis aprecut qu'il s'agissait de modifier toujours la premiere ligne, la meilleure methode dans ce cas la c'est d'utiliser: ----------- fichier: read/lines %cfg.txt change at fichier 1 [join "C:\Program Files\GPrime-LicSrv\logs\" [new-date ".txt"]] puis de faire un write/lines dans le fichier %cfg.txt (aps encore trouver comment le faire sans que ca me renvoi une erreur...) ---------- ou d'utiliser "open" car apres tout on a pas besoin de charger tout le fichier, il y a que la premiere ligne a changer ---------- J'espere pas trop vous ennuyer mais je suis admin sys qui commence VRAIMENT a apprendre a developper, donc je vais certainement sortir un paquet de "niaiseries" de debutant... Thanx... | |
Didec | 11-Jun-2007/11:22:53+2:00 |
Si c'est la première ligne, ou de manière générale, si il n'y a qu'une ligne à modifier alors tu peut faire ainsi :txt: read %cfg.txt new-date: form now/day * 100 + now/month * 10000 + now/year parse/all a [thru "c:\program files\serveur\" d: some digit f: ".log" skip 4 (f: change/part d new-date f) to end] write %cfg.txt txt Petit conseil pour les logs, je trouve bien plus facile de s'y retrouver en mettant le nom du fichier en YYYYMMDD ! | |
tonic8 | 11-Jun-2007/12:56:27+2:00 |
Hello ci-joint le script final, merci Didec merci Guest2 et je precise que je prefere lire aussi les log avec des noms au format YYYYMMDD, mais parfois il y a des clients qui sont pas super logique... Rebol [ Title: "Modif nom du fichier de log" Date: 11-jun-2007 File: %modif_log.r Author: [Tonic8 Didec Guest2] Version: 1.0.0 ] ; On défini les chiffres : digit: charset "0123456789" ; On défini le fichier a modifier : fichier-conf: %"/C/Program Files/serveurs/cfg.txt" ; on charge le fichier en memoire dans la variable "txt" txt: read fichier-conf ; on cree la variable "new-date" ; format YYYYMMDD new-date: form now/year * 100 + now/month * 100 + now/day ; format DDMMYYYY ; new-date: form now/day * 100 + now/month * 10000 + now/year parse/all txt [thru "c:\Program Files\serveur\logs\" d: some digit f: ".log" skip 4 (f: change/part d new-date f) to end] ; on ecrit le resultat dans le fichier avec les données modifiées de la variable "txt" write fichier-conf txt euh... comment que vous faites pour mettre dans un bloc gris? | |
Didec | 11-Jun-2007/15:23:24+2:00 |
Pour le moment, il faut encadrer le code dans des balises à taper : [ code]le code en question[ /code] (sans les espaces dans les crochets). | |
tonic8 | 28-Jun-2007/18:03:39+2:00 |
Pour terminer sur les formats de date il y a une recette de Carl himself http://www.rebol.net/cookbook/recipes/0008.html ce qui donne en resumé: to-timestamp: func [when /local stamp add2] [ add2: func [num] [ ; always create 2 digit number num: form num if tail? next num [insert num "0"] append stamp num ] stamp: form when/year add2 when/month add2 when/day add2 when/time/hour add2 when/time/minute add2 when/time/second stamp ] | |
Login required to Post. |