IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Fusionner deux fichiers CSV en Powershell [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut Fusionner deux fichiers CSV en Powershell
    Bonjour,

    j'ai deux fichier csv

    Je voudrais inserer un champs se trouvant dans le deuxieme dans le premier

    Dans le premier fichier j'ai un champs 'Work Location Country'

    Dans le deuxième fichier j'ai deux champs 'Country' et 'Code'

    Je voudrais ajouter en fin du fichier1 le champs 'Code' à la fin

    Pouvez vous m'aider a debugger mon code ?

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $WD = Import-Csv -Path 'C:\TEMP\Original.csv'
    $Country = Import-Csv -Path 'C:\TEMP\Country.csv'
    $waag = Import-Csv -Path 'C:\TEMP\final.csv'
     
     
    $usersInBoth = Compare-Object -ReferenceObject $WD.'Work Location Country' -DifferenceObject $Country.'Country' -IncludeEqual | 
    Where-Object {$_.SideIndicator -eq "=="} |
    Select-Object -ExpandProperty InputObject 
     
    $results = ForEach($user in $usersInBoth) {
        $u = $WD | Where-Object {$_.'Work Location Country' -eq $Country}
        $r = $Country | Where-Object {$_.'Work Location Country' -eq $Country}
        New-Object -TypeName psobject -Property @{
            "code" = $r.code
        }
    }
     
    $results | Export-CSV -NoTypeInformation -Path $waag

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut
    J'ai deux fichiers :

    un qui contient l'adresse (120 000 lignes)
    Nom adresse1,adresse2,ville,Work Location Country,.........

    dans le deuxieme
    'Work Location Country, code,.........


    j'aimerai mettre le 'code' dans le premier en derniere colonne.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Le deuxième fait bien sur la même taille que le premier ?!
    Et le numéro de ligne suffit à faire la correspondance ?!

  4. #4
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut
    Non les deux fichiers ne font pas le meme nombre de ligne

    pour simplifier j'ai un fichier qui a des adresses
    dont le pays champs 'Work Location Country"


    Le deuxieme a les correspondance

    Work Location Country;Code
    Afghanistan;AF
    Åland Islands;AX
    Albania;AL
    Algeria;DZ
    American Samoa;AS
    Andorra;AD
    Angola;AO
    Anguilla;AI
    Antarctica;AQ
    Antigua and Barbuda;AG
    Argentina;AR
    Armenia;AM

    Je voudrais avoir une colonne supplementaire dans le premier fichier qui contiendrait le code du pays.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Voici.
    Attention 1 : La nouvelle colonne ne doit pas exister dans le fichier (mais tu demande de l'ajouter donc ça devrait être bon)
    Attention 2 : Tu as des caractères spéciaux pour Åland Islands, vérifie l'encodage si tu rencontre un problème sur cet item

    Fichier 1.csv
    A;Work Location Country;B
    1;Afghanistan;1
    2;Algeria;2
    3;;3
    4;Anguilla;4
    Fichier 2.csv
    Work Location Country;Code
    Afghanistan;AF
    Åland Islands;AX
    Albania;AL
    Algeria;DZ
    American Samoa;AS
    Andorra;AD
    Angola;AO
    Anguilla;AI
    Antarctica;AQ
    Antigua and Barbuda;AG
    Argentina;AR
    Armenia;AM
    Code
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $WLC = @{}
    Import-Csv -Path "2.csv" -Delimiter ";" | ForEach-Object {$WLC.Add($_."Work Location Country", $_.Code)}
     
    $data = Import-Csv -Path "1.csv" -Delimiter ";" | Select-Object *, @{Label="WlcCode";Expression={$WLC[$_."Work Location Country"]}}
    $data | Export-Csv -Path "1.csv" -Delimiter ";" -NoTypeInformation

    Fichier 1.csv
    "A";"Work Location Country";"B";"WlcCode"
    "1";"Afghanistan";"1";"AF"
    "2";"Algeria";"2";"DZ"
    "3";"";"3";
    "4";"Anguilla";"4";"AI"

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut
    Bonjour,

    Les pays se trouvant dans le Fichier 2.csv ne sont obligatoirement dans le 1er
    Il m'affiche le message suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Import-Csv : Le fichier 'C:\TEST\@{Work Location Country;Code=Afghanistan;AF}' est introuvable.
    Au caractère C:\TEST\ajout_country.ps1:10 : 1
    + Import-Csv -Path $Country -Delimiter ";" | ForEach-Object {$WLC.Add($ ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OpenError: (:) [Import-Csv], FileNotFoundException
        + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ImportCsvCommand
     
    Import-Csv : Lecteur introuvable. Il n'existe aucun lecteur nommé «@{Employee ID;..........;Work Location Country=00133261;......».
    Au caractère C:\TEST\ajout_country.ps1:12 : 9
    + $data = Import-Csv -Path $WD -Delimiter ";" | Select-Object *, @{Labe ...
    +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (@{Employee ID;P...E;2020-10-01 00:String) [Import-Csv], DriveNotFoundException
        + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand
     
    Export-Csv : Impossible de lier l'argument au paramètre «*InputObject*», car il a la valeur Null.
    Au caractère C:\TEST\ajout_country.ps1:13 : 9
    + $data | Export-Csv -Path $Result -Delimiter ";" -NoTypeInformation
    +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData : (:) [Export-Csv], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportCsvCommand

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Les pays se trouvant dans le Fichier 2.csv ne sont obligatoirement dans le 1er
    Oui ceci n'est pas un problème

    Peux tu montrer ton code

  8. #8
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut
    mon code

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Destination folder for the new files. Be sure to include a backslash after the folder.
    $folderPathDest = 'C:\TEST\ID-TEMP-current.csv'
     
    # Destination folder for the new files. Be sure to include a backslash after the folder.
    $folderPathDest3 = 'C:\TEST\ID-GLOBAL-current.csv'
     
    Import-Csv -Path $folderPathDest -Delimiter ";" | 
    Select-Object *, @{Label="groupe";Expression={If($_.ID -notmatch "^\d+$") {"Supprimer"} ElseIf ($_.Code -eq "TOTO") {"OK"} Else {"NOK"}}} | 
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "NOK" -and $_.ID2 -eq "") {$_.ID1} Else {$_.ID2}}} |
    Export-Csv -Path $folderPathDest3 -NoTypeInformation

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ce n'est pas le bon code

  10. #10
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut
    désole

    le bon code :
    Code POWERSHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $WD = Import-Csv -Path 'C:\TEST\ID.csv'
    $Country = Import-Csv -Path 'C:\TEST\Country.csv'
    $result = 'C:\TEST\ID-Country.csv'
     
    $WLC = @{}
    Import-Csv -Path $Country -Delimiter ";" | ForEach-Object {$WLC.Add($_."Work Location Country", $_.Code)}
     
    $data = Import-Csv -Path $WD -Delimiter ";" | Select-Object *, @{Label="WlcCode";Expression={$WLC[$_."Work Location Country"]}}
    $data | Export-Csv -Path $Result -Delimiter ";" -NoTypeInformation

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ok je comprend mieux tu fait un double import-csv

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $WD = 'C:\TEST\ID.csv'
    $Country = 'C:\TEST\Country.csv'
    $result = 'C:\TEST\ID-Country.csv'
     
    $WLC = @{}
    Import-Csv -Path $Country -Delimiter ";" | ForEach-Object {$WLC.Add($_."Work Location Country", $_.Code)}
     
    $data = Import-Csv -Path $WD -Delimiter ";" | Select-Object *, @{Label="WlcCode";Expression={$WLC[$_."Work Location Country"]}}
    $data | Export-Csv -Path $Result -Delimiter ";" -NoTypeInformation

    A noter que si ton fichier de resultat est différent de celui d'entré tu peux faire ceci

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Import-Csv -Path $WD -Delimiter ";" | Select-Object *, @{Label="WlcCode";Expression={$WLC[$_."Work Location Country"]}} |
    Export-Csv -Path $Result -Delimiter ";" -NoTypeInformation

  12. #12
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 319
    Par défaut
    super ca marche
    je vais pouvoir gagner un temps considérable sur mes traitements

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Fusionner 1 colonne dans deux fichiers csv en 2 colonnes dans un seul fichier csv
    Par nathan_kchr dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/09/2019, 09h02
  2. Fusionner 2 fichier csv.
    Par cirdec57 dans le forum Développement de jobs
    Réponses: 11
    Dernier message: 26/05/2008, 16h16
  3. Réponses: 2
    Dernier message: 16/05/2008, 11h49
  4. Fusionner deux fichiers identiques access
    Par poplite dans le forum Access
    Réponses: 1
    Dernier message: 06/02/2008, 22h46
  5. Fusionner deux fichiers
    Par frouge dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/05/2007, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo