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 :

Extraire donnée apres un mot précis (batch)


Sujet :

Scripts/Batch

  1. #21
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    J'ai windows 7 pro

  2. #22
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Très bien, j'ai apporter quelques corrections afin de fiabilisé des opérations, merci de mettre à jour votre code.

    Vous pouvez aussi lancer une fenêtre 'Windows PowerShell' ('démarrer' -> 'recherche les programmes et fichi...' -> taper power -> vous trouverez 'Windows PowerShell')
    Après il faut donner les chemin complet du script Powershell. Exemple chez moi : F:\DC\script.ps1
    Cela permettra de voir les erreurs car la fenêtre restera ouverte.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    $maj = "A-ZÀÁÂÈÉÊËÌÍÎÏÒÓÔÕÖØÙÚÛÜÇÑ"
    $min = "a-zàáâãäåèéêëìíîïòóôõöøùúûüÿçñ"
    $trimcar = ",", " ", "-"
    $separator = ";"
    $dossier = (Get-Item $PSCommandPath).DirectoryName
     
    $csvstr = "Fichier${separator}Nom${separator}Prenom${separator}Date décès${separator}Fils/fille${separator}Epoux/Epouse/Veuve/Veuf/Divorcé`n"
     
    foreach ($file in (Get-Item -Path "${dossier}\*.txt")) #*.txt))
    {
     
        $nom = ""
        $prenom = ""
        $datedeces = ""
        $filsoufillede = ""
        $epouxépouseveuveveuf = ""
     
        $content = Get-Content -Path $file.FullName
        $content = $content -replace ' - ', '. '
        $content = $content -replace '\s+', ' '
        $nom = $content[0].Trim()
        $content = $content -join ""
     
        $contenttmp = $content.Substring($content.IndexOf($nom) + $nom.Length)
        if ($nom.Length -ne 0 -and $contenttmp -cmatch "((\b[$maj]+\w*[\s,]+)*$nom)")
        {
            $prenom = $matches[0].Replace($nom, "").Trim($trimcar)
        }
     
        if ($content -match " (fille|fils|file)[^\.,]*")
        {
            $filsoufillede = $matches[0].Trim($trimcar)
        }
        if ($content -match "\s(Le.*)est décédé")
        {
            $datedeces = $matches[1].Trim($trimcar)
        }
        if ($content -match " (Fils de|Fille de)[^\.,]*")
        {
            $filsoufillede = $matches[0].Trim($trimcar)
        }
        if ($content -match "(Epoux de|epouse de|veuve de|veuf de|Divorcée de|Divorcé de)[^\.,]*")
        {
            $epouxépouseveuveveuf = $matches[0].Trim($trimcar)
        }
     
        $csvstr += $file.Name + ${separator} + $nom  + ${separator} + $prenom + ${separator} + $datedeces + ${separator} + $filsoufillede + ${separator} + $epouxépouseveuveveuf + "`n"
     
    }
     
    Set-Content -Path "${dossier}\export.csv" -Force -Value $csvstr

  3. #23
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    Voici ce que j'ai:

    Le dossier se nomme script est il est a la racine de C:\

    le terme script.ps1 n'est pas reconnu comme nom d'applet etc....
    CategoryInfo: Objectnotfound: <script.ps1:String> commandnofoundexception
    FullyQualifiedErrorId: CommandFoundException

    Suggestion 3 General: la commande script.ps1 est introuvable mais elle existe a l'emplacement actif. par defaut PowerShell de ne charge pas de commande à partir de l'emplacement actif. Si vous approuvez cette commande, tapez ".\script.ps1" à la place

  4. #24
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    je viens de relancer le script et cela fonctionne. Export vers les csv. Je ragrde tout cela et je vous tiens au courant

    JB

  5. #25
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    Vous etes absolument fantastique !! Cela fonctionne a merveille. Il faut simplement que je reprenne ceux qui sont mal OCR. Dans la date de deces il est mentionné egalement la date de deces dans le fichier csv. Pensez-vous qu'il soit possible de limiter la date uniquement et par consequent de ne pas importer le texte à partir du "à" ?

    JB

  6. #26
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Vous ne souhaitez que l'heure pour la date de décès ?

  7. #27
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    En fait je ne souhaiterai avoir que la date. J'ai regardé votre code et j avoue qu ' est encore nebuleux pour moi

    Je voulais essayer aussi d'extraire la date de naissance quand elle est dispo.

    Mais tout ce que vous avez deja fait est extraordinaire. Merci encore.

    JB

  8. #28
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Voici une maj qui pourra vous satisfaire.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    $maj = "A-ZÀÁÂÈÉÊËÌÍÎÏÒÓÔÕÖØÙÚÛÜÇÑ"
    $min = "a-zàáâãäåèéêëìíîïòóôõöøùúûüÿçñ"
    $trimcar = ",", " ", "-", "."
    $separator = ";"
    $dossier = (Get-Item $PSCommandPath).DirectoryName
     
    $csvstr = "Fichier${separator}Nom${separator}Prenom${separator}Date décès${separator}Heure décès${separator}Naissance${separator}Fils/fille${separator}Epoux/Epouse/Veuve/Veuf/Divorcé`n"
     
    foreach ($file in (Get-Item -Path "${dossier}\*.txt")) #*.txt))
    {
     
        $nom = ""
        $prenom = ""
        $datedeces = ""
        $heuredeces = ""
        $naissance = ""
        $filsoufillede = ""
        $epouxépouseveuveveuf = ""
     
        $content = Get-Content -Path $file.FullName
        $content = $content -replace ' - ', '. '
        $content = $content -replace '\s+', ' '
        $nom = $content[0].Trim($trimcar)
        $content = $content -join ""
     
        $contenttmp = $content.Substring($content.IndexOf($nom) + $nom.Length)
        if ($nom.Length -ne 0 -and $contenttmp -cmatch "((\b[$maj]+\w*[\s,]+)*$nom)")
        {
            $prenom = $matches[0].Replace($nom, "").Trim($trimcar)
        }
     
        if ($content -match " (fille|fils|file)[^\.,]*")
        {
            $filsoufillede = $matches[0].Trim($trimcar)
        }
        if ($content -match "\s(Le.*)est décédé")
        {
            $datedeces = $matches[1].Trim($trimcar)
            if ($datedeces -match "(.*)à([^à]+)")
            {
                $datedeces = $matches[1].Trim($trimcar)
                $heuredeces = $matches[2].Trim($trimcar)
            }
        }
        if ($content -match "\b(né |née )[^\.,]*")
        {
            $naissance = $matches[0].Trim($trimcar)
        }
        if ($content -match " (Fils de|Fille de)[^\.,]*")
        {
            $filsoufillede = $matches[0].Trim($trimcar)
        }
        if ($content -match "(Epoux de|epouse de|veuve de|veuf de|Divorcée de|Divorcé de)[^\.,]*")
        {
            $epouxépouseveuveveuf = $matches[0].Trim($trimcar)
        }
     
        $csvstr += $file.Name + ${separator} + $nom  + ${separator} + $prenom + ${separator} + $datedeces + ${separator} + $heuredeces + ${separator} + $naissance + ${separator} + $filsoufillede + ${separator} + $epouxépouseveuveveuf + "`n"
     
    }
     
    Set-Content -Path "${dossier}\export.csv" -Force -Value $csvstr

  9. #29
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Merci énormément pour tout. Je vous suis très reconnaissant de tout ce que vous avez fait.

    JB

  10. #30
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    En exécutant le script je vois que parfois dans l'extraction de la date de décès, il peut être inscrit "Le" ou "L e". Idem pour le lieu ou l'on peut avoir "à" ou "a".
    Est ce qu'il est possible de rajouter des conditions dans la ligne de code:
    if ($content -match "\s(Le.*)est décédé") et if ($datedeces -match "(.*)à([^à]+)")Tous mes mes essais se sont avérés vains pour le moment.

    Merci.

    JB

  11. #31
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Bonjour,

    Je regarde cela dans la journée.

  12. #32
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Voici les modifications comme promis

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $content -match "\b(L *e.*)est décédé"
    ' *' : Espace rencontré 0 ou plusieurs fois

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $datedeces -match "(.*)(à|a) (.*)"
    '(à|a) ' : 'à' ou 'a' suivi d'un espace (une fois)

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    $maj = "A-ZÀÁÂÈÉÊËÌÍÎÏÒÓÔÕÖØÙÚÛÜÇÑ"
    $min = "a-zàáâãäåèéêëìíîïòóôõöøùúûüÿçñ"
    $trimcar = ",", " ", "-", "."
    $separator = ";"
    $dossier = (Get-Item $PSCommandPath).DirectoryName
     
    $csvstr = "Fichier${separator}Nom${separator}Prenom${separator}Date décès${separator}Heure décès${separator}Naissance${separator}Fils/fille${separator}Epoux/Epouse/Veuve/Veuf/Divorcé`n"
     
    foreach ($file in (Get-Item -Path "${dossier}\*.txt")) #*.txt))
    {
     
        $nom = ""
        $prenom = ""
        $datedeces = ""
        $heuredeces = ""
        $naissance = ""
        $filsoufillede = ""
        $epouxépouseveuveveuf = ""
     
        $content = Get-Content -Path $file.FullName
        $content = $content -replace ' - ', '. '
        $content = $content -replace '\s+', ' '
        $nom = $content[0].Trim($trimcar)
        $content = $content -join ""
     
        $contenttmp = $content.Substring($content.IndexOf($nom) + $nom.Length)
        if ($nom.Length -ne 0 -and $contenttmp -cmatch "((\b[$maj]+\w*[\s,]+)*$nom)")
        {
            $prenom = $matches[0].Replace($nom, "").Trim($trimcar)
        }
     
        if ($content -match " (fille|fils|file)[^\.,]*")
        {
            $filsoufillede = $matches[0].Trim($trimcar)
        }
        if ($content -match "\b(L *e.*)est décédé")
        {
            $datedeces = $matches[1].Trim($trimcar)
            if ($datedeces -match "(.*)(à|a) (.*)")
            {
                $datedeces = $matches[1].Trim($trimcar)
                $heuredeces = $matches[3].Trim($trimcar)
            }
        }
        if ($content -match "\b(né\s+|née\s+)[^\.,]*")
        {
            $naissance = $matches[0].Trim($trimcar)
        }
        if ($content -match " (Fils\s+de|Fille\s+de)[^\.,]*")
        {
            $filsoufillede = $matches[0].Trim($trimcar)
        }
        if ($content -match "(Epoux de|epouse de|veuve de|veuf de|Divorcée de|Divorcé de)[^\.,]*")
        {
            $epouxépouseveuveveuf = $matches[0].Trim($trimcar)
        }
     
        $csvstr += $file.Name + ${separator} + $nom  + ${separator} + $prenom + ${separator} + $datedeces + ${separator} + $heuredeces + ${separator} + $naissance + ${separator} + $filsoufillede + ${separator} + $epouxépouseveuveveuf + "`n"
     
    }
     
    Set-Content -Path "${dossier}\export.csv" -Force -Value $csvstr

  13. #33
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Points : 10
    Points
    10
    Par défaut
    Merci Merci et Merci !!!

    Je vais essayer de travailler le script pour decomposer la cellule naissance en obtenant uniuement le nom de la ville et la date dans deux cellules distinctes.

    Vraiment bien powershell

    JB

  14. #34
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 183
    Points : 5 754
    Points
    5 754
    Par défaut
    Même si je ne suis pas trop Powershell, c'est tellement plus puissant que le batch ou autre shell

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/08/2014, 18h47
  2. [XL-2013] Extraire un nombre précis de caractères après un mot trouvé par la fonction LIKE
    Par Dan.exe dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/02/2014, 16h19
  3. peut-on séparer d'une meme cellule des mots apres un mot donné ?
    Par cendrine20 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/01/2009, 17h02
  4. Récupérer ses données après formatage
    Par Sékiltoyai dans le forum Composants
    Réponses: 7
    Dernier message: 21/04/2007, 18h01
  5. Réponses: 1
    Dernier message: 22/09/2005, 16h23

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