Question [RESOLU]Modif caractère dans fichier et solution

Plus d'informations
il y a 4 ans 7 mois #29247 par Christophe
Modifier et enregistrer caractère sur ligne spécifique dans fichier TXT.

Bonjour,

Je viens vers vous pour trouver une solution.
Comme vous le verrez plus bas dans le message je fais partie des novices en powershell.;)

Je cherche à modifier uniquement les lignes qui commencent par \"4=\" le caractère \" 5\" par \" 3\" dans un fichier TXT et d'enregister les modifications.:whistle:

Voici pour exemple une partie du fichier :

4=002 4
6=2.000
7=112.05758
8=98.34928
9=15.508
37=3163497.776
38=2031301.508
39=53.967
5=8
4=002 2
6=2.000
7=122.50523
8=98.59684
9=18.250
37=3163494.378
38=2031303.400
39=53.967
5=9
4=002 5
6=2.000
7=128.90948
8=98.78612
9=21.368
37=3163491.323
38=2031305.481
39=53.972
5=10
4=002 3
6=2.000
7=135.80944
8=99.22309
9=27.602
37=3163485.976
38=2031309.629
39=53.902


Le programme:
[code:1]
clear

$filenames = Get-ChildItem \"C:\Data_Transfert\Raw\*.txt\"

write-host \"$filenames\"

foreach ($filename in $filenames)
{
(Get-Content $filename) -replace ' 5', ' 3' | Set-Content $fileName
#SOLUTION QUI FONCTIONNE MAIS CHANGE TOUS LES \" 5\" \" 3\" DU FICHIER

(Get-Content $filename).Select-String -Pattern \"4=\" | foreach-object{$_-replace \" 5\" , \" 3\"} | Set-Content $Filename
#SOLUTION QUI FONCTIONNE MAIS LORSQUE J'OUVRE LE FICHIER IL NE CONTIENT QUE LES LIGNES \"4=Modifié ou pas\" ET LE RESTE A DISPARUE
}
[/code:1]

Par avance, je vous en remercie.

Christophe.

Message édité par: Tdmpowershell, à: 6/09/19 15:26

Message édité par: Tdmpowershell, à: 6/09/19 15:29<br><br>Message édité par: Tdmpowershell, à: 13/09/19 10:33

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

Plus d'informations
il y a 4 ans 7 mois #29249 par Hicham Madini
Salut Christophe,

essaie comme ca

[code:1]clear

$filenames = Get-ChildItem \&quot;C:\Data_Transfert\Raw\*.txt\&quot;

write-host \&quot;$filenames\&quot;

foreach ($filename in $filenames)
{
(Get-Content $filename) | ForEach-Object {
if ( $_ -match '^4=' ) {
$_ -replace ' 5', ' 3'
}
else {
$_
}
} | Out-File $filename
}[/code:1]

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

Plus d'informations
il y a 4 ans 7 mois #29250 par Christophe
Bonjour,

Merci pour votre réponse.
Je fais le test jeudi et je vous tiens informé.

Christophe.

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

Plus d'informations
il y a 4 ans 7 mois #29255 par Christophe
Bonjour,

Génial, au top, exactement la procédure attendue, merci.

Evidemment deux questions quand vous avez un moment:

L'accent circonflexe placer avant \&quot;^4=\&quot;, qu'elle signification?????

Qu'elle est la différence entre :
\&quot; | Out-File $fileName\&quot; et \&quot; | Set-Content $fileName\&quot;

Bonne journée,

Christophe.

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

Plus d'informations
il y a 4 ans 7 mois #29256 par Quentin
Bonjour,

le \&quot;^\&quot; désigne le début de ligne (voir les leçons sur les regex)

Out-file va écraser le fichier
Set-content modifie juste le contenu

Out-file :
docs.microsoft.com/en-us/powershell/modu...le?view=powershell-6

Set-content :
docs.microsoft.com/en-us/powershell/modu...nt?view=powershell-6

Whitatrax

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

Plus d'informations
il y a 4 ans 7 mois #29259 par Christophe
Bonjour,

Ok, je consulterai les liens dans un environnement plus tranquille.

Merci.

Christophe.

Ps: Je mets en résolu.

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

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