Question Rempacements multiples dans un fichier

Plus d'informations
il y a 13 ans 9 mois #11997 par Matthew BETTON
zemitch écrit:

je veux dire, la fonction Replace-String, tu m'as conseillé de creuser de ce côté.
Mais \"replace-string\" n'existe pas.

Regarde dans le forum Contribution la fonction Replace-String.


Bonsoir,

Il faut chercher via le champ \"Recherche forum\", en haut à droite sur toutes les pages.

Le fil Replace-String

Le téléchargement se trouve dans le bas du premier post...

Il faut lire, c'est très intéressant ;)


@+

Matthew

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

Plus d'informations
il y a 13 ans 9 mois #11998 par Laurent Dardenne
Matthew BETTON écrit:

Il faut chercher via le champ \"Recherche forum\", en haut à droite sur toutes les pages.

+1

Je supposais que le fait de poster un message dans un forum public impliquait d'en connaitre le fonctionnement. Tout faux.
Matthew BETTON écrit:

Il faut lire, c'est très intéressant

Après réflexion, je pense que cette fonction s'adresse à un public connaissant les regex, pour les autres elle ne peut être que du chinois, voir un vomitif (ce que n'est pas le chinois :P ).
Le mieux serait que je propose directement la solution.
Prochainement...

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 9 mois #11999 par zemitch
Bon j'ai trouvé un moyen certainement pas des plus élégant, mais ça marche. Reste juste à effacer les fichiers temporaires créés, mais ça c'est du détail.

[code:1]
$Mapping = @(Import-Csv -Delimiter \";\" Y:\Données\PowerShell\ReplaceString\mapping.csv)
$FileToChange=\"Y:\Données\PowerShell\ReplaceString\Texte2Map.txt\"
$NombreElements=$Mapping.count
$i=0


$NewFileToChange=$FileToChange
do
{

Get-Content $NewFileToChange | Foreach-Object {$_ -replace $($Mapping[$i].old) , $($Mapping[$i].new)} | Set-Content \"Y:\Données\PowerShell\ReplaceString\Texte2Map2+'$i'.txt\"
$NewFileToChange=\"Y:\Données\PowerShell\ReplaceString\Texte2Map2+'$i'.txt\"
$i++
} while ($i -lt $NombreElements)

[/code:1]

Le dernier fichier créé est le fichier modifié.<br><br>Message édité par: zemitch, à: 8/06/12 22:13

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

Plus d'informations
il y a 13 ans 9 mois #12000 par Laurent Dardenne
zemitch écrit:

Bon j'ai trouvé un moyen certainement pas des plus élégant,

A l'origine la vocation de la fonction Replace-String était de pouvoir réutiliser des traitements au travers de hashtable de configuration.
L'esthétisme n'était pas ma préoccupation première lors de sa réalisation.
zemitch écrit:

mais ça marche.

C'est le principal :)

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 9 mois #12001 par Matthew BETTON
Laurent Dardenne écrit:

Après réflexion, je pense que cette fonction s'adresse à un public connaissant les regex, pour les autres elle ne peut être que du chinois, voir un vomitif (ce que n'est pas le chinois :P ).


:laugh:

Dans ce genre d'explication, entre collègues, il y a l'un des interlocuteurs qui interrompt l'autre : \&quot;Tu le dis quand je saigne du nez !\&quot;.

Bref, je suis d'accord avec toi mais cela ne l'empêche pas d'être intéressant pour les connaisseurs, les plus habitués .... Et puis certaines fois, si on ne se force pas, on ne progresse pas.<br><br>Message édité par: Matthew BETTON, à: 9/06/12 10:36

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

Plus d'informations
il y a 13 ans 9 mois #12002 par Laurent Dardenne
Matthew BETTON écrit:

Dans ce genre d'explication, entre collègues, il y a l'un des interlocuteurs qui interrompt l'autre : \&quot;Tu le dis quand je saigne du nez !\&quot;.

Désolé je n'ai pas compris :unsure:
Non,tu ne saignes pas du nez, tout va bien :lol:
Matthew BETTON écrit:

Et puis certaines fois, si on ne se force pas, on ne progresse pas.

On est d'accord :)

Une solution avec Replace-String, si toutefois j'ai bien compris le problème.

On construit les fichiers de test :
[code:1]
$Path=\&quot;c:\temp\&quot;
$Mapping=\&quot;$Path\fichierDeMapping.csv\&quot;
$Maj=\&quot;$Path\Maj.csv\&quot;

@\&quot;
\&quot;Old\&quot;;\&quot;New\&quot;
mastring1;tatata1
mastring2;tatata3
mastring33;tytytyt2
mastring4;tdfdf
\&quot;@ &gt; $Mapping

@\&quot;
\&quot;Clé\&quot;;\&quot;Valeur\&quot;
mastring1;Nouvelle_Valeur
mastring33;ValeurNouvelle
\&quot;@ &gt; $Maj
[/code:1]
Ensuite on applique la modification :
[code:1]
$ClésàModifier=Import-Csv $Maj -Delimiter ';'
#On construit le hashtable de regex à partir des objets importés
$h=@{}
$ClésàModifier|
Foreach {
#Construit deux groupes de capture
#On réutilise le premier groupe capturé pour générer le résultat.
$h.Add(\&quot;^($($_.Clé));(.*)\&quot;,\&quot;`$1;$($_.Valeur)\&quot;«»)
}
Get-Content $Mapping|Replace-String $h
[/code:1]
Reste à reconstruire le fichier final...

Tutoriels PowerShell

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

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