![]() |
| 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. | |