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 :

Créer de nouvelles colonnes à partir de colonnes existantes d'un CSV [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    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 : 326
    Par défaut Créer de nouvelles colonnes à partir de colonnes existantes d'un CSV
    Bonjour,

    J'aimerai travailler sur des colonnes d'un csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "code";"nom complet" ;...
    "1";"nom1,Prenom1";...
    j'aimerai obtenir le csv suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "code std";"code";"nom complet";"Nom";"Premon"
    "00000001";"1";"nom1,Prenom1";"nom1";"Prenom1"
    J'aimerai que dans la colonne "code std" : le contenu de la colonne "code" sur 8 caractères (complété par des 0)

    et j'aimerai completer deux colonne ("nom" et "prenom") : par le contenu de la colonne "nom complet" (en utilisant la virgule comme séparateur)

    Merci pour votre aide

  2. #2
    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
    Bonjour Laurent,

    Il me semble que maintenant tu dois maitriser les import-csv, export-csv et select-object avec création de nouvelle colonne.
    Ceci devrait suffire à répondre à ton besoin, peux tu nous poster ton code et nous dire ou tu bloque ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    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 : 326
    Par défaut
    Bonjour,
    j'ai tenté quelque chose come ca sans succes

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Get-Content $Source |
     ForEach-Object{ If(Len($_.'Employee Id') -ne '8'}  {Label="ID std" @, $_.'Employee Id'.toString("00000000") }  else  {Label="ID std" @, $_.'Employee Id'}} |
     Out-File $tempo

    Pour le dispatch entre d'une colonne vers 2 autres je sais pas pas

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Mai 2020
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2020
    Messages : 288
    Par défaut
    Bonjour,

    Pour la partie "Nom Complet", je ne pense pas que ce soit bien compliqué. Il faut simplement récupérer dans une variable les données et les ajouter de type :

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $prenom = $fichier.prenom
    $nom = $fichier.nom
     
    $NomComplet = "$prenom,$nom"

    Avec le système d'ajout de colonne dans un CSV, je vous donne juste l'idée de comment le faire, ce code dans l'état actuel ne fonctionnera pas bien sur.

    Pour l'autre partie, je pense qu'Ericlm128 pourra vous aider.

    J'ai remarqué aussi que dans votre code vous avez 2 parenthèses ouvrantes mais qu'une seule fermante après le "if".

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    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 : 326
    Par défaut
    je pars du "nom complet" qui est formate "nom, prenom " et je récupère le nom et le prénom dans 2 colonnes existantes.


    Sinon j'ai bien tenté
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Get-Content $SOURCE |
    ForEach-Object{$firstname= ($_.'Employee Name' -split "," , 1)
    $lastname= ($_.'Employee Name' -split "," , 0)} |
     Out-File $tempo

    En revanche j'aimerais supprimer les espaces avant et après (trim)

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Mai 2020
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2020
    Messages : 288
    Par défaut
    Vous pouvez peut-être vous appuyer sur ce code que je viens de faire :

    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
     
    $source = "C:\temp\test.csv"
    $value1 = Import-Csv -Path $source -Delimiter ";" | select code 
    $value2 = import-csv -Path $source -Delimiter ";" | select nomcomplet
     
    ForEach ($entry in $value1) {
    $value3 = $entry.code.PadLeft(8, '0')
    }
     
    foreach ($entry in $value2) {
    $nomsplit = $entry.nomcomplet -split ","
    $nom = $nomsplit[0]
    $prenom = $nomsplit[1]
    }
     
    Import-Csv -path $Source -Delimiter ";" | Select-Object *,@{Name = 'Nom';Expression={$nom}},@{Name = 'Prenom';Expression={$prenom}},@{Name = 'code std';Expression={$value3}} | Export-Csv "C:\Temp\test2.csv" -NoTypeInformation

    Pour ma part je récupère bien un code Std en 00000000 et un découpage en 2 colonne du nom et du prénom.

    Pour supprimer les espaces avant et après, vous pouvez utiliser trim effectivement. Vous voulez trim quel données ? vous pouvez faire par exemple

    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
     
    $source = "C:\temp\test.csv"
    $value1 = Import-Csv -Path $source -Delimiter ";" | select code 
    $value2 = import-csv -Path $source -Delimiter ";" | select nomcomplet
     
    ForEach ($entry in $value1) {
    $value3 = $entry.code.PadLeft(8, '0')
    }
     
    foreach ($entry in $value2) {
    $nomtrim = $entry.nomcomplet.Trim(" ")
    $nomsplit = $nomtrim -split ","
    $nom = $nomsplit[0]
    $prenom = $nomsplit[1]
    }
     
    Import-Csv -path $Source -Delimiter ";" | Select-Object *,@{Name = 'Nom';Expression={$nom}},@{Name = 'Prenom';Expression={$prenom}},@{Name = 'code std';Expression={$value3}} | Export-Csv "C:\Temp\test2.csv" -NoTypeInformation

  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
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Import-Csv -Path "test.csv" -Encoding UTF8 -Delimiter ";" | 
    Select-Object @{N="code std"; E={$_.code.PadLeft(8, '0')}}, "code", "nom complet", @{N="Nom"; E={$_."nom complet".Split(",")[0]}}, @{N="Prenom"; E={$_."nom complet".Split(",")[1]}} |
    Export-Csv -Path "new.csv" -Encoding UTF8 -Delimiter ";" -NoTypeInformation

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

Discussions similaires

  1. [DATA] Créer des nouvelles colonnes a partir des valeurs d'une colonne
    Par ChrisMaire dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/02/2013, 16h11
  2. créer des nouvelles colonnes à partir de colonnes existantes
    Par lenorsk dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2012, 12h42
  3. Réponses: 1
    Dernier message: 29/08/2011, 12h05
  4. Créer de nouvelles colonnes à partir d'une ligne
    Par julien4 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/10/2007, 12h33
  5. Réponses: 16
    Dernier message: 09/10/2006, 10h12

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