Question
[Résolu]Modification fichier texte
- jeffdu62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 9 ans 4 mois #22580
par jeffdu62
[Résolu]Modification fichier texte a été créé par jeffdu62
Bonjour à tous.
tout d'abord merci de m'avoir aider sur mon premier ce qui m'as permis de bien me débloquer.
Je suis sur la fin de mon script et je bloque sur une étape.
mon script doit modifier un fichier de type txt à partir d'un autre fichier.
Exemple :
fichier_ori.txt posséde la ligne toto=titi
fichier_modif.tct possède la ligne toto=tata
le but donc du script est que dans le fichier_ori.txt toto=tata mais sans que cela ne modifie le reste du fichier.
j'ai déjà un but de script pour ajouter une donnée mais pour modifier je sèche complètement malgré que j'ai regardé sur le forum, les tutos et le livre j'y arrive pas.
j'en suis arrivé à ca ( la boucle fonctionne meme si c'est pas propre)
[code:1]$properties=\"C:\Users\Desktop\TEST\\"
$properties_a_modifier=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$temp=\"tmp.txt\"
#on recupère le nom du fichier à modifier :
$nom_fichier= Get-ChildItem $properties_a_modifier |select Name
#on boucle sur chaque fichier présent dans le dossier
foreach ($i in $nom_fichier){
cd $properties_a_modifier
$nom=$i.name
Write-Host \"Nom du fichier à modifier :\" $nom
$modify=Get-Content $nom
#On boucle sur le contenu du fichier
foreach ($j in $modify){
cd $properties
#on liste le contenu du fichier à modifier et on remplace le contenu des lignes que l'on met dans un fihcier temporaire
$modification=Get-Content $nom |foreach { $_ -replace \"$nom\",\"$j\" } |Set-Content $temp
$donnee=get-content $temp
#réécriture dans le fichier d'origine
set-content $nom $donnee
}
}[/code:1]
une idée, un indice qui pourrait me débloquer?
EDIT: je met le code que je viens de modifier, là ou je bloque c'est comment récupérer la valuer avant le = aifn d'essayer de le trouver dans le fichier à modifier.
Merci
Message édité par: hutre, à: 7/11/16 11:28<br><br>Message édité par: hutre, à: 1/12/16 16:42
tout d'abord merci de m'avoir aider sur mon premier ce qui m'as permis de bien me débloquer.
Je suis sur la fin de mon script et je bloque sur une étape.
mon script doit modifier un fichier de type txt à partir d'un autre fichier.
Exemple :
fichier_ori.txt posséde la ligne toto=titi
fichier_modif.tct possède la ligne toto=tata
le but donc du script est que dans le fichier_ori.txt toto=tata mais sans que cela ne modifie le reste du fichier.
j'ai déjà un but de script pour ajouter une donnée mais pour modifier je sèche complètement malgré que j'ai regardé sur le forum, les tutos et le livre j'y arrive pas.
j'en suis arrivé à ca ( la boucle fonctionne meme si c'est pas propre)
[code:1]$properties=\"C:\Users\Desktop\TEST\\"
$properties_a_modifier=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$temp=\"tmp.txt\"
#on recupère le nom du fichier à modifier :
$nom_fichier= Get-ChildItem $properties_a_modifier |select Name
#on boucle sur chaque fichier présent dans le dossier
foreach ($i in $nom_fichier){
cd $properties_a_modifier
$nom=$i.name
Write-Host \"Nom du fichier à modifier :\" $nom
$modify=Get-Content $nom
#On boucle sur le contenu du fichier
foreach ($j in $modify){
cd $properties
#on liste le contenu du fichier à modifier et on remplace le contenu des lignes que l'on met dans un fihcier temporaire
$modification=Get-Content $nom |foreach { $_ -replace \"$nom\",\"$j\" } |Set-Content $temp
$donnee=get-content $temp
#réécriture dans le fichier d'origine
set-content $nom $donnee
}
}[/code:1]
une idée, un indice qui pourrait me débloquer?
EDIT: je met le code que je viens de modifier, là ou je bloque c'est comment récupérer la valuer avant le = aifn d'essayer de le trouver dans le fichier à modifier.
Merci
Message édité par: hutre, à: 7/11/16 11:28<br><br>Message édité par: hutre, à: 1/12/16 16:42
Connexion ou Créer un compte pour participer à la conversation.
- jeffdu62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 9 ans 4 mois #22601
par jeffdu62
Réponse de jeffdu62 sur le sujet Re:Modification fichier texte
j'ai un peu avancé sur mon problème :
j’utilise import-csv afin de pouvoir jouer avec les données.
j’arrive bien à modifier les données :
ci-dessous le script en question :
[code:1]$properties=\"C:\Users\Desktop\TEST\\"
$properties_a_modifier=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$temp=\"result.properties\"
$nom_fichier= Get-ChildItem $properties_a_modifier
foreach ($nom in $nom_fichier.name){
#on importe les fichiers properties avec import-csv
cd $properties_a_modifier
$properties_modif=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
cd $properties
properties_ori=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
#on boucle sur chaque élément du tableau crée avec import-csv
foreach ($i in $properties_ori){
foreach ($j in $properties_modif){
if ($i.avant -eq $j.avant)
{
$i.apres=$j.apres
$ini=$properties_ori|Export-Csv $temp -Delimiter = -NoTypeInformation|ft -HideTableHeader
}
}
}
}[/code:1]
le problème que j'arrive pas à solutionner pour le moment :
dans le fichier tmp j'ai mes résultats sous la forme :
@{avant=titi; apres=frff }
@{avant=tutu; apres=grapouille}
@{avant=totp; apres=cvfred}
@{avant=blabla; apres=toto}
alors que j'aimerai les avoir sous la forme :
titi=frff
tutu=grapouille
etc
une piste qui pourrait me conduite à la finalisation?
EDIT: j'arrive maintenant à afficher un résultat plus ou moins correct
\"avant\",\"apres\"
\"titi\",\"frff \"
\"tutu\",\"grapouille\"
\"totp\",\"cvfred\"
\"blabla\",\"toto\"
me reste à supprimer les \"\" saudf que je peux pas faire un replace car il peut avoir ce caractère dans apres
merci<br><br>Message édité par: hutre, à: 10/11/16 11:58
j’utilise import-csv afin de pouvoir jouer avec les données.
j’arrive bien à modifier les données :
ci-dessous le script en question :
[code:1]$properties=\"C:\Users\Desktop\TEST\\"
$properties_a_modifier=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$temp=\"result.properties\"
$nom_fichier= Get-ChildItem $properties_a_modifier
foreach ($nom in $nom_fichier.name){
#on importe les fichiers properties avec import-csv
cd $properties_a_modifier
$properties_modif=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
cd $properties
properties_ori=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
#on boucle sur chaque élément du tableau crée avec import-csv
foreach ($i in $properties_ori){
foreach ($j in $properties_modif){
if ($i.avant -eq $j.avant)
{
$i.apres=$j.apres
$ini=$properties_ori|Export-Csv $temp -Delimiter = -NoTypeInformation|ft -HideTableHeader
}
}
}
}[/code:1]
le problème que j'arrive pas à solutionner pour le moment :
dans le fichier tmp j'ai mes résultats sous la forme :
@{avant=titi; apres=frff }
@{avant=tutu; apres=grapouille}
@{avant=totp; apres=cvfred}
@{avant=blabla; apres=toto}
alors que j'aimerai les avoir sous la forme :
titi=frff
tutu=grapouille
etc
une piste qui pourrait me conduite à la finalisation?
EDIT: j'arrive maintenant à afficher un résultat plus ou moins correct
\"avant\",\"apres\"
\"titi\",\"frff \"
\"tutu\",\"grapouille\"
\"totp\",\"cvfred\"
\"blabla\",\"toto\"
me reste à supprimer les \"\" saudf que je peux pas faire un replace car il peut avoir ce caractère dans apres
merci<br><br>Message édité par: hutre, à: 10/11/16 11:58
Connexion ou Créer un compte pour participer à la conversation.
- jeffdu62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 9 ans 4 mois #22602
par jeffdu62
Réponse de jeffdu62 sur le sujet Re:Modification fichier texte
Enfin, j'ai trouvé.
meme si ce n'est pas tres beau, il fait ce que je souhaite et ca me débloque :
[code:1]$properties=\"C:\Users\Desktop\TEST\\"
$properties_a_modifier=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$nom_fichier= Get-ChildItem $properties_a_modifier
foreach ($nom in $nom_fichier.name){
#on importe les fichiers properties avec import-csv
cd $properties_a_modifier
$properties_modif=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
cd $properties
$properties_ori=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
#on boucle sur chaque élément du tableau crée avec import-csv
foreach ($i in $properties_ori){
foreach ($j in $properties_modif){
if ($i.avant -eq $j.avant)
{
$i.apres=$j.apres
# on exporte les résultat dans un fichier.
$ini=$properties_ori|Export-Csv polop -Delimiter \"=\" -NoTypeInformation|ft -HideTableHeaders
}
}
}
}
# on modifie le fichier avec les informations de la boucle.
$resultat=get-content polop |foreach {$_ -replace '\"',''}|Set-Content $nom[/code:1]
meme si ce n'est pas tres beau, il fait ce que je souhaite et ca me débloque :
[code:1]$properties=\"C:\Users\Desktop\TEST\\"
$properties_a_modifier=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$nom_fichier= Get-ChildItem $properties_a_modifier
foreach ($nom in $nom_fichier.name){
#on importe les fichiers properties avec import-csv
cd $properties_a_modifier
$properties_modif=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
cd $properties
$properties_ori=Import-Csv $nom -Delimiter '=' -header ('avant','apres')
#on boucle sur chaque élément du tableau crée avec import-csv
foreach ($i in $properties_ori){
foreach ($j in $properties_modif){
if ($i.avant -eq $j.avant)
{
$i.apres=$j.apres
# on exporte les résultat dans un fichier.
$ini=$properties_ori|Export-Csv polop -Delimiter \"=\" -NoTypeInformation|ft -HideTableHeaders
}
}
}
}
# on modifie le fichier avec les informations de la boucle.
$resultat=get-content polop |foreach {$_ -replace '\"',''}|Set-Content $nom[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- jeffdu62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 9 ans 4 mois #22622
par jeffdu62
Réponse de jeffdu62 sur le sujet Re:Modification fichier texte
le script précédent ajoute des caractères sur toutes les lignes et cela ne va donc pas.
Apres plusieurs tests et recherches, je suis tombé sur une solution qui fonctionne et en plus le code est quand meme plus propre
je vous le met ici des fois que celui intéresserais quelqu'un un jour
[code:1]$modif=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$content=Get-ChildItem $modif
[String]$temp=\"C:\users\Desktop\TEST\temp.txt\"
foreach($fic in $content)
{
cd $modif
write-host \"contenu:\" $content
[int]$valeur=0
[String]$in=\"C:\users\desktop\TEST\$fic\"
[String[]]$test=Get-Content $in
[string[]]$test2=get-content $fic
$import=Import-Csv $fic -Delimiter \"=\" -Header ( 'modif','amodif')
$import2=Import-Csv $in -Delimiter \"=\" -Header ( 'modif','amodif')
foreach ($line2 in $import2)
{
[int]$valeur2=0
foreach ($line in $import)
{
if ($import[$valeur2].modif -eq $import2[$valeur].modif)
{
$test=$test -replace ($test[$valeur],$test2[$valeur2])
}
$valeur2++
}
$valeur++
$test > $temp
}
}[/code:1]
Apres plusieurs tests et recherches, je suis tombé sur une solution qui fonctionne et en plus le code est quand meme plus propre
je vous le met ici des fois que celui intéresserais quelqu'un un jour
[code:1]$modif=\"C:\Users\Desktop\TEST\PROPERTIES_A_MODIFIER_WINDOWS\"
$content=Get-ChildItem $modif
[String]$temp=\"C:\users\Desktop\TEST\temp.txt\"
foreach($fic in $content)
{
cd $modif
write-host \"contenu:\" $content
[int]$valeur=0
[String]$in=\"C:\users\desktop\TEST\$fic\"
[String[]]$test=Get-Content $in
[string[]]$test2=get-content $fic
$import=Import-Csv $fic -Delimiter \"=\" -Header ( 'modif','amodif')
$import2=Import-Csv $in -Delimiter \"=\" -Header ( 'modif','amodif')
foreach ($line2 in $import2)
{
[int]$valeur2=0
foreach ($line in $import)
{
if ($import[$valeur2].modif -eq $import2[$valeur].modif)
{
$test=$test -replace ($test[$valeur],$test2[$valeur2])
}
$valeur2++
}
$valeur++
$test > $temp
}
}[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 4 mois #22625
par Philippe
Réponse de Philippe sur le sujet Re:Modification fichier texte
salut hutre
je suis heureux que tu puisse avancé seul sur ce sujet
j'ai essayé plusieurs fois de te répondre mais le travaille m'a rattrapé a chaque fois
et je m'efforce de ne pas ramené d'activité informatique à la maison 
pour répondre à ta demande il n'y a pas de réponse simple, ou plutôt pas de commande prevue pour ce cas
il te faut donc créé un script en fonction de ta situation
et il y a plusieurs solution possible ! tu en a trouvé une, j'ai n'ai trouvé une autre, et un autre utilisera une autre façon de faire
et dernier remarque désagréable, dans ton dernier code il manque l'enregistrement de tes modif
voila un script repris du tiens mais qui utilise une autre technique :
[code:1]# dossier avec le fichier contenant les modifs à faire
$properties = \"C:\Users\Desktop\TEST\modif de propriété a effecttuer.txt\"
# dossier avec les fichiers à modifié; on peut indiqué un fichier ou un dossier avec plusieurs fichiers a modifier
$properties_a_modifier = \"C:\Users\Desktop\TEST\fichier à modifier.txt\"
# on importe le fichier fichiers contenant les modifs à faire
$modif = Get-Content $properties | ConvertFrom-String -Delimiter '=' -PropertyNames avant,apres
$nom_fichier = Get-ChildItem $properties_a_modifier
foreach ($nom in $nom_fichier.fullname) { # on selectionne un fichier
# cd $properties_a_modifier ############ si on utilise la propiété fullname sur la ligne precedeante, le changement de dossier est inutile !!!
# on importe les fichiers properties
$properties_ori = Get-Content $nom
$dest = @()
# on boucle sur chaque élément du tableau crée avec import-csv
foreach ($ligne in $properties_ori) {
$i = $ligne -split \"=\"
foreach ($j in $modif) {
if ($i[0] -eq $j.avant) {
$i[1] = $j.apres
# on exporte les résultat dans un fichier.
}
}
$dest += \"$($i[0])=$($i[1])\"
}
# on enregistre le fichier avec les informations modifer.
$dest | Set-Content \"C:\polop.txt\" ##### changé le nom du fichier destination par : $nom
}
[/code:1]
n'hésite pas a revenir nous posé des questions et a répondre a au autres sujets si tu pense avoir la solution
je suis heureux que tu puisse avancé seul sur ce sujet
j'ai essayé plusieurs fois de te répondre mais le travaille m'a rattrapé a chaque fois
pour répondre à ta demande il n'y a pas de réponse simple, ou plutôt pas de commande prevue pour ce cas
il te faut donc créé un script en fonction de ta situation
et il y a plusieurs solution possible ! tu en a trouvé une, j'ai n'ai trouvé une autre, et un autre utilisera une autre façon de faire
sans vouloir faire une critique, ton precedent script ne faisais pas ce que tu demandéle script précédent ajoute des caractères sur toutes les lignes et cela ne va donc pas.
dans tes codes que tu donne j'ai du mal a trouvé quel est le fichier modifier et quel est le fichier avec les modif a faireApres plusieurs tests et recherches, je suis tombé sur une solution qui fonctionne et en plus le code est quand meme plus propre
et dernier remarque désagréable, dans ton dernier code il manque l'enregistrement de tes modif
voila un script repris du tiens mais qui utilise une autre technique :
[code:1]# dossier avec le fichier contenant les modifs à faire
$properties = \"C:\Users\Desktop\TEST\modif de propriété a effecttuer.txt\"
# dossier avec les fichiers à modifié; on peut indiqué un fichier ou un dossier avec plusieurs fichiers a modifier
$properties_a_modifier = \"C:\Users\Desktop\TEST\fichier à modifier.txt\"
# on importe le fichier fichiers contenant les modifs à faire
$modif = Get-Content $properties | ConvertFrom-String -Delimiter '=' -PropertyNames avant,apres
$nom_fichier = Get-ChildItem $properties_a_modifier
foreach ($nom in $nom_fichier.fullname) { # on selectionne un fichier
# cd $properties_a_modifier ############ si on utilise la propiété fullname sur la ligne precedeante, le changement de dossier est inutile !!!
# on importe les fichiers properties
$properties_ori = Get-Content $nom
$dest = @()
# on boucle sur chaque élément du tableau crée avec import-csv
foreach ($ligne in $properties_ori) {
$i = $ligne -split \"=\"
foreach ($j in $modif) {
if ($i[0] -eq $j.avant) {
$i[1] = $j.apres
# on exporte les résultat dans un fichier.
}
}
$dest += \"$($i[0])=$($i[1])\"
}
# on enregistre le fichier avec les informations modifer.
$dest | Set-Content \"C:\polop.txt\" ##### changé le nom du fichier destination par : $nom
}
[/code:1]
n'hésite pas a revenir nous posé des questions et a répondre a au autres sujets si tu pense avoir la solution
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.052 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]Modification fichier texte