Premier Script parse
tonic88-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
Didec8-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
tonic88-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 ?
guest28-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)
tonic88-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 ?
tonic810-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...
Didec11-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 !
tonic811-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?
Didec11-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).
tonic828-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.


Powered by RebelBB and REBOL 2.7.8.4.2