Question remplacement de chaine dans un fichier mais avec log

Plus d'informations
il y a 2 semaines 5 jours #31047 par Scirop
J'ai ça qui marche bien mais sans savoir ce qui est fait:
(get-content $fichier.FullName) | %{$_ -replace $p1,$p2} | set-content $fichier.FullName

Pour en savoir plus (nombre d'occurences, traces des fichiers traités...
J'ai tenté ça:
    $txt=(get-content $fichier.FullName)
    $c1=0
    $c2=0

    foreach ($line in $txt)
    {
        $c1=$c1+([regex]::Matches($line, $p1)).count
        $line=$line -replace $p1,$p2
        $c2=$c2+([regex]::Matches($line, $p1)).count
    }
    
    write-host ($fichier.FullName ) -NoNewline
    Write-Host (" " + $c1 + " occurence avant") -ForegroundColor yellow -NoNewline
    if ($c2 -eq 0)
    {
        write-host (" " + $c2 + " occurence apres") -ForegroundColor green
    }
    else
    {
        write-host (" " + $c2 + " occurence apres") -ForegroundColor red
    }
    try
    {
        set-content -Path $fichier.FullName -value $txt
    }
    catch
    {
        write-host ("erreur d'écriture") -ForegroundColor red
        write-host ($error[0]) -ForegroundColor red
    }

Mais les fichiers ne sont pas modifiés...
Est-ce que le for-each travaille sur des copies quand je ne passe pas par les pipes?
En tout cas mon $txt n'est pas modifié...

Que faire pour que ça marche?
Merci.

 

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

Plus d'informations
il y a 2 semaines 4 jours #31060 par Laurent Dardenne
Salut,
>>Que faire pour que ça marche?
déjà trouver l'origine du pb, avec Write-Debug par exemple.
Ensuite trouver les occurences de $txt, à priori rien ne la modifie.
La variable $Line de la boucle foreach, pas du cmdlet Foreach-object, est locale et ce n'est pas une référence.
Une soluce rapido (à tester):
 $Result=  foreach ($line in $txt)
    {
        $c1 +=([regex]::Matches($line, $p1)).count
        $line -replace $p1,$p2
        $c2 +=([regex]::Matches($line, $p1)).count
    }

Tutoriels PowerShell

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

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