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 :

Comparaison deux fichier TXT avec code d'action


Sujet :

Scripts/Batch

  1. #21
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 221
    Par défaut
    Il semble qu'il n'y ai que des modifications entre tes deux fichier ? Est ce vrai ?

  2. #22
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Par défaut
    Oui effectivement il n'y avait que des modifications entre les deux fichier d'exemple, je viens de tester avec ma base RH sa fonctionne et traité en même pas 5 secondes :p Tu ma vachement aidé pour le coup car je vais pouvoir avancer sur le script !
    Il faut maintenant que je m'attaque à archiver les deux fichier de comparaisons et les renommer dans un dossier d'archive qui est épuré tous les 30 jours. Et ajouter une condition d'import afin de ne traiter l'import si il y a au minimum 1000 lignes dans les fichiers afin d'éviter d'importer une erreur en amont du système RH.
    Grandement merci

  3. #23
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 221
    Par défaut
    Oui la ça déchire

  4. #24
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Par défaut
    Oui la c'est le top du top ericlm128 !
    J'aurais aimé rajouter une condition dans le script je m'explique :
    Je souhaite vérifier avant l'export que le résultat comporté dans la colonne D soit dans une liste métier. Si ils le sont les résultats compris dans cette liste sont exporter dans le fichier extrationrésultatvrai.csv et si ils le sont pas dans extractionrésultatfaux.csv. J'ai fais un petit schéma :

    Nom : fichierf1bis.PNG
Affichages : 437
Taille : 48,5 Ko
    Fichiers attachés Fichiers attachés

  5. #25
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Par défaut
    J'ai corrigé la photo dans le commentaire d'avant j'ai fais une erreur.. :p

  6. #26
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 221
    Par défaut
    Comme ceci je pense

    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
    24
    25
    # Définition des en-têtes
    $Header = 'A', 'B', 'C', 'D', 'E'
     
    # Import des fichiers
    $F1 = Import-Csv -Path "Fichier10.txt" -Encoding Default -Header $Header -Delimiter ";"
    $F2 = Import-Csv -Path "Fichier11.txt" -Encoding Default -Header $Header -Delimiter ";"
     
    $ListeMetier = Get-Content -Path "listemetier.txt" -Encoding Default
     
    # Variable qui servira à stocker le résultat
    $result = @()
     
    # Récupère les différences d'ID (ajout, suppression)
    # Et stock dans $F1 et $F2 le statut SideIndicator pour les objects découverts, via le paramètre PassThru
    $result = (Compare-Object -ReferenceObject $F1 -DifferenceObject $F2 -Property A -PassThru) | Select-Object A, B, C, D, E, @{Label="Code d'action";Expression={if($_.SideIndicator -eq "=>"){0}else{2}}}
     
    # Récupère les modifications pour les doublons d'ID en comparant toutes les propriétés (A, B, C, D, E)
    $result += (Compare-Object -ReferenceObject @($F1 | Where-Object {$_.SideIndicator -eq $null}) -DifferenceObject @($F2 | Where-Object {$_.SideIndicator -eq $null}) -Property A, B, C, D, E -ErrorAction SilentlyContinue) | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object A, B, C, D, E, @{Label="Code d'action";Expression={1}}
     
    # Identifie le travail métier et trie les résultats
    $result = $result | Select-Object *, @{Label="IsMetier";Expression={if($ListeMetier -contains $_.D){$true}else{$false}}} | Sort-Object -Property "Code d'action" -Descending
     
    # Export
    $result | Where-Object {$_.IsMetier} | Select-Object A, B, C, D, E, "Code d'action" | Export-Csv -Path "extrationrésultatvrai.csv" -NoTypeInformation -Encoding Default
    $result | Where-Object {!$_.IsMetier} | Select-Object A, B, C, D, E, "Code d'action" | Export-Csv -Path "extractionrésultatfaux.csv" -NoTypeInformation -Encoding Default

  7. #27
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Par défaut
    Un énorme et grand MERCI vous m'avez fait gagné encore un temps précieux ! Mes compétences en dev et script n'est pas au top :/

  8. #28
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Par défaut
    Me revoilà !
    J'ai adapté le script en revanche je rencontre une problématique car j'ai remplacer l'import de F2 csv par des données issues d'une base SQL soit cette commande :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $F2 = Import-Csv -Path "Fichier11.txt" -Encoding Default -Header $Header -Delimiter ";"
    par cette commande :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $F2 = Invoke-Sqlcmd -Query "SELECT A, B, C, D, E, F, G, H, I, J FROM [BDD01].[BDD01].[T_F2] " -ServerInstance "XXXXX" -Database "XXXXX" | Sort-Object -Property A, B, C, D, E, F, G, H, I, J

    Cette commande fonctionne parfaitement en revanche je rencontre une problématique pour l'import des listes métiers par des données issues d'une base SQL soit cette commande :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ListeMetier = Get-Content -Path "listemetier.txt" -Encoding Default
    par cette commande :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ListeMetier = Invoke-Sqlcmd -Query "SELECT AA FROM [BDD01].[BDD01].[T_LISTEMETIER]" -ServerInstance "XXXXX" -Database "XXXXX" | Sort-Object -Property AA

    Le problème c'est que l'identification du travail métier et trie les résultats met tous les résultats dans l'export Where-Object {!$_.IsMetier}.

    Comment peut-on faire pour résoudre cela ?

    Merci d'avance

  9. #29
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 221
    Par défaut
    Tu doit vérifier le contenu de $ListeMetier et le nombre d'élément qu'il contient.

    Et entre les deux commandes n'oublie pas que tu as ceci qui identifie le travail métier :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Identifie le travail métier et trie les résultats
    $result = $result | Select-Object *, @{Label="IsMetier";Expression={if($ListeMetier -contains $_.D){$true}else{$false}}} | Sort-Object -Property "Code d'action" -Descending

  10. #30
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 25
    Par défaut
    Merci effectivement il fallait modifier également la commande que tu cite par cela :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $result = $result | Select-Object *, @{
    	Label = "IsAlias"; Expression = {
    		if (($ListeMetier.AA -contains $_.I)) { $true }
    		else { $false }
    	}
    } | Sort-Object -Property "Code d'action" -Descending

    Je dois également vérifier si dans la colonne D contient le mot "Caissière" j'ajoute dans la colonne F le mot "Magasin" mais je ne sais pas comment je peut l'intégrer au script
    Nom : traitement.PNG
Affichages : 358
Taille : 55,7 Ko

  11. #31
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 221
    Par défaut
    Il suffit d'ajouter une colonne F à select-object au bonne endroit :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    @{Label="F";Expression={if("Caissière" -eq $_.E){"Magasin"}else{""}}}

    Mais nous l'avons déjà fait plusieurs fois. Il faut comprendre le principe, tu devrait avoir tout ce qu'il te faut pour le faire.

  12. #32
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Par défaut
    Bonjour, je remonte ce sujet, car il m'aide beaucoup.
    Sur cette dernière ligne droite, je m'appuie sur ce bout de code qui ne sort que les lignes modifiées. J'ai gardé cette dernière pour les besoins, mais j'aimerais également garder celles identiques et tout comme "Modifier" identifier aussi dans "CODE_MV" celle identique. ( {Label="CODE_MV";Expression={"Egale"}} )

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    # Définition des en-têtes
    $Header = 'CODE_MV', 'A', 'B', 'C', 'D', 'E'
     
    $result = @()
     
    # Import des fichiers
    $F1 = Import-Csv -Path "C:\Plop\R2.csv" -Encoding Default -Header $Header -Delimiter ";"
    $F2 = Import-Csv -Path "C:\Plop\R1.csv" -Encoding Default -Header $Header -Delimiter ";"
     
    $result = (Compare-Object -ReferenceObject @($F1 | Where-Object {$_.SideIndicator -eq $null}) -DifferenceObject @($F2 | Where-Object {$_.SideIndicator -eq $null}) -Property A, B, C, D, E -ErrorAction SilentlyContinue) | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object A, B, C, D, E, @{Label="CODE_MV";Expression={"Modifier"}}

    J'ai bien sûr fait des tests différents que celle belle ligne de code à base d’if imbriquer dans des If, mais deux csv de plus de 8000 lignes et 14 colonnes à comparer voilà la violence.....

    Je dois faire à peu près le même travail que celui de ce sujet, mais avec quelques légères différences et il me reste que ce petit détail. Merci pour votre aide.

  13. #33
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 221
    Par défaut
    Peux tu transmettre les fichiers d'entré de test, ce que tu souhaite en sortie et sur quelle critère.

Discussions similaires

  1. Code VBA afin de croiser deux fichiers excel avec un SI et un rechercher V
    Par rodriguez nzuzi dans le forum Général VBA
    Réponses: 1
    Dernier message: 12/12/2015, 01h16
  2. [PowerShell] Comparaison de caractere ou mot dans deux fichiers txt en powershell
    Par sanched dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 30/07/2015, 17h15
  3. [Python 3.X] Comparaison de deux fichiers txt avec une reponse IDENTIQUE: oui ou non
    Par pascaljqt dans le forum Général Python
    Réponses: 5
    Dernier message: 28/07/2015, 23h09
  4. Comparaison deux fichiers avec cobol
    Par Babylone159 dans le forum Cobol
    Réponses: 5
    Dernier message: 03/09/2012, 12h36
  5. comparaison de deux fichiers textes avec un script python
    Par zekruss dans le forum Général Python
    Réponses: 1
    Dernier message: 10/11/2009, 05h52

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