Question Modifier la premiere ligne d'un fichier texte

Plus d'informations
il y a 15 ans 9 mois #2521 par Gabriel
:blush:

oups je m'apercoit que le ton est un peu dur, désolé c'est pas ce que je veux faire sentir...

Mais j'apprecie toute aide... :woohoo:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2522 par Laurent Dardenne
tonic8 écrit:

oups je m'apercoit que le ton est un peu dur,

Non, la citation pourrait le laisser penser, de mon coté j'utilise celle-ci Beatus, qui prodest, quibus potest (\"Heureux qui vient se rendre utile à ceux qu'il peut aider.\") ;)
N'as tu pas assez d'information pour résoudre ce problème ?
Quant à Perl il me semble qu'il est basé sur des chaînes de caractère alors que PS est basé objet.

Pour la sauvegarde du tableau cela ne devrait pas poser de pb particulier, c'est la collection de base sous PS.

[edit]
tonic8 écrit:

C'est si compliqué d'ouvrir le fichier lire la première ligne rechercher une date (ou plus simple 8 caractères en chiffre) écrire a la place 8 autres, puis fermer le fichier (ou même se taper toutes les lignes ?

Non cela est dû aux contrôles à effectuer. Tu peux utiliser la rache mais cela dépend si tu préféres préparer le lundi tes problèmes du vendredi :lol:<br><br>Message édité par: Laurent Dardenne, à: 26/06/08 23:41

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2560 par Gabriel
Salut

bon alors pour la forme le code final :lol:
[code:1]
### Script de modification du nom du fichier log en fonction de la date du jour
## Author = tonic8
## Version = 0.2

## on set les variable nécessaire a l'execution du script
$cheminRacine = 'c:\Program Files\appli'
$cheminLogs = 'c:\Program Files\appli\logs'

$fichierConf = 'cfg.txt'
$fichierConfTemp = 'cfg.tmp'

## On supprime l'ancien fichier temporaire créé précédement
remove-item \&quot;$cheminRacine\$fichierConfTemp\&quot;

## On renomme le fichier de conf en fichier temporaire
rename-item -path $cheminRacine\$fichierConf -newname $fichierConfTemp

## on récupère la date du jour et on la formate comme souhaité
## puis on crée la string qui va indiquer au serveur de licence l'endroit du fichier de log
$dateDuJour = get-date -format yyyy-MM-dd
$cheminFichierLog = $cheminLogs + \&quot;\\&quot; + $dateDuJour + \&quot;.log\&quot;

## on créé le fichier de conf avec comme premiere ligne le chemin du fichier de log
$cheminFichierLog | out-file -filepath $cheminRacine\$fichierConf -encoding ASCII

## on parse le fichier temporaire pour exclure la seule ligne qui contient la string \&quot;Program\&quot;
# et ce qui résulte est envoyer en append dans le fichier de conf
get-content $cheminRacine\$fichierConfTemp | where-object {$_ -notmatch \&quot;Program\&quot;} | out-file -filepath $cheminRacine\$fichierConf -encoding ASCII -append
[/code:1]

le principe:
0. on supprime l'ancien fichier .tmp
1. on renomme le fichier à manipuler en fichier .tmp
2. on genere la string qui sera en premier dans le fichier de conf
3. puis on l'insere dans un nouveau fichier
4. on recupere tout le fichier tmp, et on le filtre.
5. la sortie filtrée est mise en append dans le nouveau fichier de conf.

Voilou si il y a des commentaires ils sont les bienvenus...:laugh:<br><br>Message édité par: tonic8, à: 7/07/08 19:04

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2562 par Laurent Dardenne
Salut,
tonic8 écrit:

Voilou si il y a des commentaires ils sont les bienvenus

M'est avis que tu n'auras pas de pb vendredi.

Je remarque toute fois un léger glissement depuis ton second poste :
tonic8 écrit:

J'explique au depart je voulais changer la premiere ligne de mon fichier texte, ce qui couvrait mon besoin avec un danger si quelqu'un vire la premiere ligne alors mon script modifierai des données utiles (la 2eme ligne etant devenu la premiere), l'info m'interesse par curiosité \&quot;comment simplement remplacer la premiere ligne d'un fichier texte par une string\&quot;

Maintenant quand j'ai finis d'ecrire mon post, je me suis apercu du danger potentiel, c'est la que je me suis dit il suffit de chercher une string qui est une date et de la remplacer.

Je me trompe ?

En tout cas ta solution a la force de la simplicité, avec qq contrôles supplémentaires je pense qu'on peut en faire un cas d'école :)

Une remarque, dans ton cas le where fonctionne car tu sais que la premiére ligne et uniquement celle-ci contient l'occurence de \&quot;program\&quot;. PowerShell ne semble pas proposer la fonctionnalité skip de la boucle for des batchs:
[code:1]
FOR /F \&quot;tokens=* skip=1\&quot; %i in (monfich.txt) do @echo %i [/code:1]
Je serais tenté d'écrire un filtre du type remove-string -first en lieu et place d'un Were-Object. Je sais le mieux est l'ennemi du bien mais ce que tu fais ici serais plus explicite.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2563 par Gabriel
Salut

Comme quoi les nuits portent conseil, et surtout les collègues de travail.

En effet le glissement c'est fait pour 2 raisons:
  • la simplicité du principe (merci Jo -mon collègue)
  • le fait qu'il y a un autre control au final, mais pas dans le script (en tout cas pas dans le script présenté, j'ai retiré les lignes hors context du thread). j'execute, tout à la fin, l'exe du service pour verifier que le fichier de conf est bon, sinon il sort en erreur. Je voulais garder le script le plus simple possible et il est inutile faire un control en powershell si l'exe qui utilise le fichier propose la fonction de check :-)

  • Le fait est que le fichier final contient de toute facon les lignes qu'il faut et d'ans l'ordre qu'il faut.
  • la première ligne est de toute facon généré dans le format attendu
  • les autres sont le resultat du filtre parce que je sais qu'il n'y a pas la string \&quot;Program\&quot; ailleurs que sur la première ligne (disont que le script est tuné aux petits oignons)

  • En fait une fois le principe trouvé j'ai plus eu de problème avec la dernière ligne (celle qui execute l'exe pour verifier le fichier de conf), car Powershell n'aimait pas la ligne de commande avec des espace dans le Path. En diggant j'ai trouvé un sript qui execute la ligne en démarrant avec \&quot;&amp;\&quot;... (ça m'a pris plus de temps pour trouver \&quot;&amp;\&quot; que de faire le reste :-( )
    Le script est en prod... (premier script powershell en prod, youhouu!!! ca se fete!)
    Merci.<br><br>Message édité par: tonic8, à: 8/07/08 16:08

    Connexion ou Créer un compte pour participer à la conversation.

    Temps de génération de la page : 0.081 secondes
    Propulsé par Kunena