Question
Rempacements multiples dans un fichier
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
+1Il faut chercher via le champ \"Recherche forum\", en haut à droite sur toutes les pages.
Je supposais que le fait de poster un message dans un forum public impliquait d'en connaitre le fonctionnement. Tout faux.
Matthew BETTON é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 chinoisIl faut lire, c'est très intéressant
Le mieux serait que je propose directement la solution.
Prochainement...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- zemitch
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
[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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
A l'origine la vocation de la fonction Replace-String était de pouvoir réutiliser des traitements au travers de hashtable de configuration.Bon j'ai trouvé un moyen certainement pas des plus élégant,
L'esthétisme n'était pas ma préoccupation première lors de sa réalisation.
zemitch écrit:
C'est le principalmais ça marche.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
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
).
Dans ce genre d'explication, entre collègues, il y a l'un des interlocuteurs qui interrompt l'autre : \"Tu le dis quand je saigne du nez !\".
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Désolé je n'ai pas comprisDans ce genre d'explication, entre collègues, il y a l'un des interlocuteurs qui interrompt l'autre : \"Tu le dis quand je saigne du nez !\".
Non,tu ne saignes pas du nez, tout va bien
Matthew BETTON écrit:
On est d'accordEt puis certaines fois, si on ne se force pas, on ne progresse pas.
Une solution avec Replace-String, si toutefois j'ai bien compris le problème.
On construit les fichiers de test :
[code:1]
$Path=\"c:\temp\"
$Mapping=\"$Path\fichierDeMapping.csv\"
$Maj=\"$Path\Maj.csv\"
@\"
\"Old\";\"New\"
mastring1;tatata1
mastring2;tatata3
mastring33;tytytyt2
mastring4;tdfdf
\"@ > $Mapping
@\"
\"Clé\";\"Valeur\"
mastring1;Nouvelle_Valeur
mastring33;ValeurNouvelle
\"@ > $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(\"^($($_.Clé));(.*)\",\"`$1;$($_.Valeur)\"«»)
}
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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Rempacements multiples dans un fichier