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 :

tester la valeur d'une colone d'un csv


Sujet :

Scripts/Batch

  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut tester la valeur d'une colone d'un csv
    Bonjour,

    je voudrais faire un script pour tester des colones dans un csv

    le fichiers se compose de 3 colonnes
    ID1,ID2,code

    je voudrais ajouter une 4eme colonne "groupe" avec les tests suivant

    si code= "TOTO" et ID1 est numeric afficher "Ok"
    si code <> "TOTO" et ID1 est numeric afficher "Nok"
    si ID1 n'est pas numeric afficher "Supprimer"


    je voudrais ajouter une 5eme colonne (id definitif) avec les tests suivant
    si groupe ="ok"
    et id2<>"" afficher ID2 else ID1

    si groupe ="nok"
    et id2<>"" afficher ID2 else ID2


    le but final est de sortir 2 fichiers
    la liste des "id defintif" des statuts ok et nok

    merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    j'ai tester sans succes ce code

    colonne :
    'ID;Local;Code;Outil;ID_def'
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Get-Content $folderPathDest2 |
     ForEach-Object{ If(isnumeric($code)} -or { $Code="TOTO" }) Else { $_.Outils eq "Nok"} |
     Out-File $folderPathDest2

  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 fichiers se compose de 3 colonnes
    ID1,ID2,code
    <>
    colonne :
    'ID;Local;Code;Outil;ID_def'

    Je te conseil de revoir les opérateurs pour commencer : http://nacta.fr/?p=175

    isnuméric n'est pas native au langage PowerShell, utilise match $machaine -match "^\d+$"

    Comme déjà conseillé, tu devrait utiliser Import-Csv pour importer un fichier csv

    Pour modifier/ajouter des colonnes tu doit utiliser Select-Object. Plus précisément, les propriétés calculées (voir exemple 10)

    Essai de tester ton code au fur et à mesure, petit à petit.

  4. #4
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    Effectivement a la base j'ai 3 colonnes
    je desire en rajouter 2 Outils et id_Def

    J'ai mis un replace pour simplifier le nom des colonnes et j'en profite pour créér les entetes

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    (gc $folderPathDest) -replace 'Employee ID;Application_ID;Company Code','ID;Local;Code;Outil;ID_def' | Set-Content $folderPathDest2

    Le but etant d'alimenter les colonnes Outils et ID_Def
    pour récupérer uniquement la colonne ID_Def dans deux fichiers distinct : code "OK" et "NOK"

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Import-Csv ($folderPathDest2)
     
    # if ($Code -Nomatch "^\d+$") {
    # Select Objet $Outils = "SUPPRIMER"
    # }
     
    if ($Code -eq "TOTO" -and $Code -match "^\d+$") {
    Select Objet $Outils = "NOK"
    }
     Export-Csv ($folderPathDest2) -NoTypeInformation

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    Pouvez-vous me donner une syntaxe qui pourra m'aiguiller pour résoudre ce type d'action ?

    merci d'avance

  6. #6
    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
    Je n'ai pas tout comprit mais voici un code qui te permettra de débuter.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Import-Csv -Path "Monfichier.csv" | 
    Select-Object *, @{Label="groupe";Expression={If($_.ID1 -notmatch "^\d+$") {"Supprimer"} ElseIf ($_.Code -eq "TOTO") {"Ok"} Else {"Nok"}}} | 
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "ok" -and $_.id2 -eq "") {$_.ID1} Else {$_.ID2}}} |
    Export-Csv -Path "Monfichier2.csv" -NoTypeInformation

  7. #7
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    j'ai essaye de modifier mais cela ne fonctionne pas
    Il affiche le groupe avec une valeur unique "Supprimer
    Le fichier se crée a vide

    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
    19
    20
    21
    22
    23
    Import-Csv -Path $folderPathDest2 | 
    # mettre  supprimer dans "Groupe si  Id est  non mumérique
    Select-Object *, @{Label="groupe";Expression={If($_.ID -notmatch "^\d+$") {"Supprimer"}}} 
     
    # mettre   "NOK" dans "Groupe" si  Id est  mumérique  et le  code est  "TOTO"
    Select-Object *, @{Label="groupe";Expression={If($_.ID -match "^\d+$" -and $_.Code -eq "TOTO") {"NOK"}}} | 
     
    # mettre  "OK" dans "Groupe" si  Id est  mumérique et  le  code n'est pas  "TOTO"
    Select-Object *, @{Label="groupe";Expression={If($_.ID -match "^\d+$" -and $_.Code -ne "TOTO") {"OK"}}} | 
     
    # mettre  dans "id definitif"  si  Groupe est  "OK"
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "OK" ) {$_.ID} Else {$_.ID2}}} |
     
    # mettre  dans "id definitif"  si  Groupe est  "NOK"
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "NOK" -and $_.ID2 -eq "") {$_.ID} }} |
     
    # mettre  dans "id definitif"  si  Groupe est  "NOK"
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "NOK" -and $_.ID2 -ne "") {$_.ID2} }} |
     
    # mettre  "SUP" dans "id definitif"  si  Groupe est  "Supprimer"
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "Supprimer" ) {"SUP"} }} |
     
    Export-Csv -Path $folderPathDest3 -delimiter ";" -NoTypeInformation

  8. #8
    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
    Envoi ton csv et essai d'utiliser la balise de code pour une meilleur compréhension

  9. #9
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    fichier mis en pièce jointe

    pour le champs "groupe" la formule Excel en colonne D serait =SI(ESTNUM(A2);SI(C3="TOTO";"OK";"NOK");"SUP").
    pour le champs "ID def" la formule Excel en colonne E serait =SI(D2="SUP";"SUP";SI(D2="OK";A2;SI(B2<>"";B2;A2))).

    Merci pour ton aide
    Fichiers attachés Fichiers attachés

  10. #10
    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
    Cela à l'air de fonctionner mais il fallait définir le bon délimiteur, tu dois connaitre maintenant

    Fichier d'entré Test.csv (j'ai renommé ID en ID1)
    ID1;ID2;Code
    133395;;AMER
    133471;;TOTO
    136207;41025;TOTO
    137820;;AMER
    141133;;AMER
    143012;58735;TOTO
    143038;;AMER
    148385;;AMER
    148485;916;TOTO
    251681;;AMER
    trans;;TOTO
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Import-Csv -Path "test.csv" -Delimiter ";" | 
    Select-Object *, @{Label="groupe";Expression={If($_.ID1 -notmatch "^\d+$") {"Supprimer"} ElseIf ($_.Code -eq "TOTO") {"Ok"} Else {"Nok"}}} | 
    Select-Object *, @{Label="id definitif";Expression={If($_.groupe -eq "ok" -and $_.ID2 -eq "") {$_.ID1} Else {$_.ID2}}} |
    Export-Csv -Path "Test2.csv" -NoTypeInformation

    Fichier de sortie Test2.csv
    "ID1","ID2","Code","groupe","id definitif"
    "133395","","AMER","Nok",""
    "133471","","TOTO","Ok","133471"
    "136207","41025","TOTO","Ok","41025"
    "137820","","AMER","Nok",""
    "141133","","AMER","Nok",""
    "143012","58735","TOTO","Ok","58735"
    "143038","","AMER","Nok",""
    "148385","","AMER","Nok",""
    "148485","916","TOTO","Ok","916"
    "251681","","AMER","Nok",""
    "trans","","TOTO","Supprimer",""

  11. #11
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    merci

    j'ai une interrgation dans ton script comment testes tu si le groupe ="OK" afficher dans "id definitif" ID1

    j'ai le message suivant :
    applet de commande Export-Csv à la position 1 du pipeline de la commande
    Fournissez des valeurs pour les paramètres suivants*:
    InputObject*:

  12. #12
    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
    J'ai testé et n'ai aucun problème.

    j'ai une interrgation dans ton script comment testes tu si le groupe ="OK" afficher dans "id definitif" ID1
    Je ne comprend pas la question

  13. #13
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    322
    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 : 322
    Par défaut
    effectivement je me suis trompé dans ma remarque

    j'ai une interrgation dans ton script il semble que si le groupe ="NOK" et ID2="" il devrait afficher dans "id definitif" ID1 or il affiche rien

  14. #14
    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
    Oui, c'est ce que tu as demandé

    je voudrais ajouter une 5eme colonne (id definitif) avec les tests suivant
    si groupe ="ok"
    et id2<>"" afficher ID2 else ID1

    si groupe ="nok"
    et id2<>"" afficher ID2 else ID2

Discussions similaires

  1. [JSTL] Tester la valeur d'une variable en mode debug
    Par neowind dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 12/06/2007, 23h25
  2. [VBA] tester la valeur d'une checkbox
    Par titof90 dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/04/2007, 11h40
  3. [VBA-E] tester la valeur d'une plage de données sans boucle
    Par bibi5883 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/04/2007, 08h36
  4. [vb2005]Tester la valeur d'une cellule d'un datagridview
    Par stargates dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2006, 10h09
  5. Tester les valeur d'une liste déroulante
    Par st0nky dans le forum Langage
    Réponses: 1
    Dernier message: 04/12/2005, 14h52

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