Question
Traitement dans un fichier excel (.xls)
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Peut être vaut-il mieux manipuler des listes d'objet au lieu de fichiers, si la volumétrie le permet.Maintenant, est ce qu'il y a un moyen d'effacer les lignes d'un fichier si un nom complet similaire est trouvé dans l'autre avec Compare-Object?
Une autre appproche , à vérifier si c'est le même sujet...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- DarKZoNe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
Ça commence à être un peu compliqué pour ce que je suis capable de faire présentementDarKZoNe écrit:
Peut être vaut-il mieux manipuler des listes d'objet au lieu de fichiers, si la volumétrie le permet.Maintenant, est ce qu'il y a un moyen d'effacer les lignes d'un fichier si un nom complet similaire est trouvé dans l'autre avec Compare-Object?
Une autre appproche , à vérifier si c'est le même sujet...
[code:1function NettoyerFichier
{param ($FichierFormattage)
$FichierAFormater = $FichierFormattage
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"=>\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"SideIndicator\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ';','\";\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace 'NumeroEmploye;NumeroSous-Service;Sous-ServiceDescription;TitreEmploi;TitreEmploiDescription;Numeroduservice;Servicedescription;Prenom;Nom;DateDepart;NomComplet','Numero Employé;Numero Sous-Service;Sous-Service Description;Titre Emploi;Titre Emploi Description;Numero du service;Service description;Prenom ;Nom;Date de départ;Nom Complet' } | Set-Content $FichierAFormater
}
$userObjects = Import-csv '.\Employés-Tous+Départs Original.csv' -Delimiter “;” -Header NumeroEmploye,NumeroSous-Service,Sous-ServiceDescription,TitreEmploi,TitreEmploiDescription,Numeroduservice,Servicedescription,Prenom,Nom,DateDepart | Select-Object -Skip 1
$userObjects | Add-Member -MemberType NoteProperty -Name 'NomComplet' -Value $Null
if (((Test-Path '.\Depart.csv') -eq $False) -and ((Test-Path '.\Actif.csv') -eq $False)) {
foreach ($Employe in $userObjects) {
$Employe.NomComplet = ($Employe.Prenom +$Employe.Nom).Trim()
$Employe | where ({$_.DateDepart -ne ''}) | export-csv '.\Depart.csv' -Append -Delimiter ';' -Verbose -NoTypeInformation
$Employe| where ({$_.DateDepart -eq ''}) |export-csv '.\Actif.csv' -Append -Delimiter ';' -Verbose -NoTypeInformation
}
$csv1 = import-csv '.\Actif.csv'
$csv2 = import-csv '.\Depart.csv'
$Sortie = Compare-Object $csv1 $csv2 -Property \"Nom Complet\" -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepart.csv -NoTypeInformation
NettoyerFichier .\VraiDepart.csv
NettoyerFichier .\Actif.csv
NettoyerFichier .\Depart.csv
}
else {
$csv1 = Import-Csv '.\Actif.csv'
$csv2 = Import-Csv '.\Depart.csv'
$Sortie = Compare-Object $csv1 $csv2 -property \"Nom Complet\" -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepart.csv -NoTypeInformation
NettoyerFichier .\VraiDepart.csv
NettoyerFichier .\Actif.csv
NettoyerFichier .\Depart.csv
[/code:1]<br><br>Message édité par: DarKZoNe, à: 16/01/13 19:18
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
A coeur vaillant rien d'impossible. Ce n'est pas du domaine du complexe mais celui de l'inconnu.Ça commence à être un peu compliqué pour ce que je suis capable de faire présentement
J'ai l'impression que tu compliques ton code.
A quoi servent les appels successif -Replace ?
Comment obtients-tu ces données ? De Compare-Object ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- DarKZoNe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
En fait les Replace me servent à \"formater\" les fichiers de la bonne manière pour qu'Excel les ouvrent correctement car l'option export-csv ajoute tout plein de \"\" un peu partout.DarKZoNe écrit:
A coeur vaillant rien d'impossible. Ce n'est pas du domaine du complexe mais celui de l'inconnu.Ça commence à être un peu compliqué pour ce que je suis capable de faire présentement
J'ai l'impression que tu compliques ton code.
A quoi servent les appels successif -Replace ?
Comment obtients-tu ces données ? De Compare-Object ?
Toute mes données viennent du fichier Employés-Tous+Départs Original.csv. Ensuite j'utilise des entêtes différentes car celles de base contiennent des espaces et des accents. Je remets les entêtes originales avec la fonction Replace car les fichiers csv sera utilisé dans un autre programme et doit absolument garder les entêtes par défaut.
Connexion ou Créer un compte pour participer à la conversation.
- DarKZoNe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
En trouvant un exemple sur internet j'ai vu qu'en remplaçant les ; par des virgules, que compare-object est capable de traiter correctement l'option -property. Maintenant ma liste contient tout les départs dans la liste. Il ne me reste qu'à modifier ma condition dans les Compare-Object pour avoir le résultat voulu!
Connexion ou Créer un compte pour participer à la conversation.
- DarKZoNe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Traitement dans un fichier excel (.xls)