Question
Soucis pour copier 2 tableaux
- Percival
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 33
- Remerciements reçus 0
il y a 4 mois 5 heures - il y a 3 mois 4 semaines #34416
par Percival
Soucis pour copier 2 tableaux a été créé par Percival
Bonjour à tous , voilà mon petit souci du jour .
Je parse un fichier csv dans un tableau, et j'ai un champs mail qui comporte 1 ou plusieurs adresses mail .
Le but est de détecter les adresses multiples (là pas de soucis), et de recopier la ligne du contact avec chaque champs pour le mail avec chacune des adresse mail renseignée .
Le problème c'est que je me retrouve avec le bon nombre de copies dans mon tableau, mais avec toujours la dernière adr mail de la liste .
Le code est comme ça :
J'ai bien dans $AllMails mes différentes adr. Mail à chaque fois,et dans $TabIdent le contenu du csv et de $Champs sont bons .
Si vous avez une idée, merci d'avance .
Je pense que ce sont les mêmes "objets" qui sont copiés, d'où le fait d'en modifier 1, modifie les autres, mais du coup je ne sais pas comment les dissocier .
J'apporte des précisions, car mon explication me semble pas claire :
dans le fichier csv j'ai ce type d'entrées :
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail21 adr_mail22
Donc je voudrai regénérer un csv du type:
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail21
nom2;prenom2;adr_mail22
Et je me trouve avec :
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail22
nom2;prenom2;adr_mail22
Car le fait de modifier l'entrée 3 modifie aussi la 2 qui était bonne .
Je parse un fichier csv dans un tableau, et j'ai un champs mail qui comporte 1 ou plusieurs adresses mail .
Le but est de détecter les adresses multiples (là pas de soucis), et de recopier la ligne du contact avec chaque champs pour le mail avec chacune des adresse mail renseignée .
Le problème c'est que je me retrouve avec le bon nombre de copies dans mon tableau, mais avec toujours la dernière adr mail de la liste .
Le code est comme ça :
Foreach ( $Champs in $TabIdent )
{
### On teste si champs adresse mail contient plusieurs adresses
$AllMails = $Champs.$ChampsMailCSV -Split " "
### Si plusieurs adresses mails, on copie le destinataire pour chaque mail entré
If ( $AllMails.Count -gt 1 )
{
Foreach ( $Mail in $AllMails )
{
If ( ! $Mail -eq "")
{
$Champs.$ChampsMailCSV = $Mail
$TabCSVFinal += $Champs
}
}
}
Else
{
$TabCSVFinal += $Champs
}
}
$TabCSVFinal
J'ai bien dans $AllMails mes différentes adr. Mail à chaque fois,et dans $TabIdent le contenu du csv et de $Champs sont bons .
Si vous avez une idée, merci d'avance .
Je pense que ce sont les mêmes "objets" qui sont copiés, d'où le fait d'en modifier 1, modifie les autres, mais du coup je ne sais pas comment les dissocier .
J'apporte des précisions, car mon explication me semble pas claire :
dans le fichier csv j'ai ce type d'entrées :
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail21 adr_mail22
Donc je voudrai regénérer un csv du type:
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail21
nom2;prenom2;adr_mail22
Et je me trouve avec :
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail22
nom2;prenom2;adr_mail22
Car le fait de modifier l'entrée 3 modifie aussi la 2 qui était bonne .
Dernière édition: il y a 3 mois 4 semaines par Percival.
Connexion ou Créer un compte pour participer à la conversation.
- Fabien
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 140
- Remerciements reçus 20
il y a 3 mois 4 semaines - il y a 3 mois 4 semaines #34417
par Fabien
Réponse de Fabien sur le sujet Soucis pour copier 2 tableaux
Bonjour Percival,
Merci pour ces précisions.
Peux-tu nous donner l'intégralité de ton code avec l'import du fichier CSV et la récupération du nom et du prénom stp ?
Merci pour ces précisions.
Peux-tu nous donner l'intégralité de ton code avec l'import du fichier CSV et la récupération du nom et du prénom stp ?
Dernière édition: il y a 3 mois 4 semaines par Fabien.
Connexion ou Créer un compte pour participer à la conversation.
- Percival
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 33
- Remerciements reçus 0
il y a 3 mois 4 semaines - il y a 3 mois 4 semaines #34418
par Percival
Réponse de Percival sur le sujet Soucis pour copier 2 tableaux
Pas de soucis:
Je vois bien qu'en fait les lignes copiées ne le sont pas au niveau valeurs mais "adresses" .
Donc qd je change un param dans 1 ligne copiée, cela modifie les autres même lignes.
Dsl si le code n'est pas spécialement propre je fais des tests sous ISE .
PS: Pour le moment je contourne le soucis en écrivant directement dans le csv de sortie en append au lieu du tableau .
$FichierSrc = "C:\test.csv"
$OutputCsv = "C:\ResultatTest.csv"
$TabIdent=Import-CSV -Path $FichierSrc -Delimiter ";" -Encoding UTF7
$AllMails = @()
$ChampsCSV = ( Get-Content $FichierSrc )[ 0 ].Split( ";" )
$ValChampsCSV = ( Get-Content $FichierSrc )[ 1 ].Split( ";" )
$IndChamps = 0
Foreach( $Champs in $ValChampsCSV )
{
If ( $Champs.IndexOf( "@" ) -gt 0 )
{
$ChampsMailCSV = $ChampsCSV[ $IndChamps ]
Break;
}
Else { $IndChamps++ }
}
$TabCSVFinal = @()
Foreach ( $Champs in $TabIdent )
{
### On teste si champs adresse mail contient plusieurs adresses
$AllMails = $Champs.$ChampsMailCSV -Split " "
### Si plusieurs adresses mails, on copie le destinataire pour chaque mail entré
If ( $AllMails.Count -gt 1 )
{
Foreach ( $Mail in $AllMails )
{
If ( ! $Mail -eq "")
{
$Champs.$ChampsMailCSV = $Mail
$TabCSVFinal += $Champs
}
}
}
Else
{
$TabCSVFinal += $Champs
}
}
$TabCSVFinal
Je vois bien qu'en fait les lignes copiées ne le sont pas au niveau valeurs mais "adresses" .
Donc qd je change un param dans 1 ligne copiée, cela modifie les autres même lignes.
Dsl si le code n'est pas spécialement propre je fais des tests sous ISE .
PS: Pour le moment je contourne le soucis en écrivant directement dans le csv de sortie en append au lieu du tableau .
Dernière édition: il y a 3 mois 4 semaines par Percival.
Connexion ou Créer un compte pour participer à la conversation.
- Fabien
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 140
- Remerciements reçus 20
il y a 3 mois 4 semaines #34421
par Fabien
Réponse de Fabien sur le sujet Soucis pour copier 2 tableaux
Merci pour ces informations complémentaires.
Tu peux simplifier grandement ton code.
Voici un exemple de ce que j'ai fait.
Fichier d'entrée CSV :
Script PowerShell :
Fichier de sortie CSV :
J'espère que ça peut t'aider
Tu peux simplifier grandement ton code.
Voici un exemple de ce que j'ai fait.
Fichier d'entrée CSV :
Nom;Prenom;Mail
nom1;prenom1;adr_mail11
nom2;prenom2;adr_mail21 adr_mail22
Script PowerShell :
#Import du fichier CSV
$TabIdent = Import-Csv -Path "C:\temp\test.csv" -Delimiter ";"
#Déclaration du tableau
$TabCSVFinal = @()
#Boucle pour chaque ligne du CSV
Foreach ( $Champs in $TabIdent )
{
#Récupérer toutes les adresses mails dans le champ Mail
$AllMails = $Champs.Mail -Split " "
#Boucle pour chaque adresse mail
foreach ($Mail in $AllMails) {
#Trier les propiétés dans un ordre bien précis (Nom,Prenom,Mail) et ajouter les valeurs
$Headers = [ordered]@{'Nom' = $Champs.Nom; 'Prenom' = $Champs.Prenom; 'Mail' = $Mail}
#Ajouter un Objet avec les propiétés au tableau
$TabCSVFinal += New-Object -TypeName PSObject -Property $Headers
}
}
# Exporter les données restructurées vers un nouveau fichier CSV
$TabCSVFinal | Export-Csv -Path "C:\Temp\New_test.csv" -Delimiter ";"
Fichier de sortie CSV :
"Nom";"Prenom";"Mail"
"nom1";"prenom1";"adr_mail11"
"nom2";"prenom2";"adr_mail21"
"nom2";"prenom2";"adr_mail22"
J'espère que ça peut t'aider
Connexion ou Créer un compte pour participer à la conversation.
- Percival
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 33
- Remerciements reçus 0
il y a 3 mois 4 semaines - il y a 3 mois 4 semaines #34423
par Percival
Réponse de Percival sur le sujet Soucis pour copier 2 tableaux
Merci , ça marche pas vraiment avec mon fichier, car tu as mis les champs en dur et ils ne correspondent pas au mien ,(mais rien de grave, j'ai au moins la démarche à suivre) .
Je vais faire un fichier csv générique du coup, pour essayer de comprendre ton code .
Merci en tous cas .
En nommant mes champs comme les tiens ça marche effectivement bien, merci
Je vais faire un fichier csv générique du coup, pour essayer de comprendre ton code .
Merci en tous cas .
En nommant mes champs comme les tiens ça marche effectivement bien, merci
Dernière édition: il y a 3 mois 4 semaines par Percival.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.115 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Soucis pour copier 2 tableaux