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 :

Effacer automatiquement certaine donnée dans un fichier texte


Sujet :

Scripts/Batch

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Effacer automatiquement certaine donnée dans un fichier texte
    Bonjour à tous!

    Je suis débutant en programmation et je voudrais savoir si vous connaissez un petit logiciel qui peux faire une manipulation automatique dans un fichier .dat (comme du .txt)

    c'est à dire je reçois un fichier tous les 10 minutes environ et je voudrais qu'il efface certaine donnée dessus sur plusieurs ligne mais toujours les même données.

    Nom : fichier text debut.PNG
Affichages : 1681
Taille : 9,4 Ko

    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:25:30|1225|1|0|141|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:50:31|1350|10|0|151|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:56:30|1356|11|0|152|8|192.168.100.100

    Voilà mon fichier de base

    Les élément en gras que je voudrais supprimer



    Nom : fichier text fin.PNG
Affichages : 1661
Taille : 8,0 Ko

    14||BORDEAUX||IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100
    14||BORDEAUX||IN|COMPTAGE|03/13/2018 12:25:30|1|0|141|8|192.168.100.100
    14||BORDEAUX||IN|COMPTAGE|03/13/2018 13:50:31|10|0|151|8|192.168.100.100
    14||BORDEAUX||IN|COMPTAGE|03/13/2018 13:56:30|1|11|152|8|192.168.100.100

    le fichier modifié qui m'intéresse

    Avez vous un logiciel à me proposer qui à cette fonctionnalité ou non?
    qui supprime

    Je reste à votre disposition pour tout autre renseignement

    Cordialement ARCHIGOR

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    dans ton cas , à priori, il suffit de réécrire le fichier en filtrant les lignes indésirables.
    Il faut utiliser des expressions régulières afin de spécifier les critères de correspondances, qq chose comme ceci en Powershell:
    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
     
    [string[]] $Text=@(
    '14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|0111|1|0|140|8|192.168.100.100'
    '14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100'
    '14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:25:30|1225|1|0|141|8|192.168.100.100'
    '14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:50:31|1350|10|0|151|8|192.168.100.100'
    '14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:56:30|1356|11|0|152|8|192.168.100.100'
    '14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|2222|1|0|140|8|192.168.100.100'
    )
     
    $Pattern='14\|BOESNER\|BORDEAUX\|1\|IN\|0\|0\|COMPTAGE\|03/13/2018 (.*?)\|1(.*?)\|(.*?)\|0\|(.*?)\|8\|192.168.100.100'
    $Text | 
     Foreach-Object {
       $LigneCourante=$_
       Write-debug "ligne: $LigneCourante" 
     
     #On n'écrit pas les lignes qui correspondent au pattern de recherche
       if ($LigneCourante  -notmatch $Pattern)
       { write-output $LigneCourante}
       #else on filtre la ligne 
     }
    #renvoi uniquement
    #14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|0111|1|0|140|8|192.168.100.100
    #14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|2222|1|0|140|8|192.168.100.100
    Mais dans cette exemple les critères définis pour le filtrage sont très flous.
    Il te faut donc spécifier les cas.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci d'avoir pris le temps de me répondre.

    Le problème c'est que en programmation je suis très nul^^

    J'ai bien compris qu'il faut que j'utilise le codage PowerShell.
    Mais existe t'il un logiciel configurable qu'il puisse automatiquement supprimé certaine données dans les lignes ?

    Si non, je veux bien apprendre.


    Je reçoit un fichier .dat
    Plusieurs ligne sont écrites automatiquements ex:
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:25:30|1225|1|0|141|8|192.168.100.100

    Je voudrais juste si possible supprimé quelque données entre certaine barre verticale ( | ) comme délimiteur.

    c'est à dire modifier le fichier à sa réception et l'envoyer dans un autre dossier.

    Ce que je voudrais supprimer:

    14|"BOESNER"|BORDEAUX|1|IN"|0|0"|COMPTAGE|03/13/2018 12:24:31|"1224|"1|0|140|8|192.168.100.100
    14|"BOESNER"|BORDEAUX|1|IN"|0|0"|COMPTAGE|03/13/2018 12:25:30|"1225|"1|0|141|8|192.168.100.100

    En sachant que le nom du document n'est jamais le même exemple (il y aura que la date qui changera):
    LDM_PC.BOESNER.2018-03-13.13-28-23.dat

    Pouvez vous me donner un exemple de codage ou plus si possible?

    Merci encore pour votre réponse

    Cordialement ARCHIGOR

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ARCHIGOR Voir le message
    Le problème c'est que en programmation je suis très nul^^
    Avant de programmer il faut déjà connaitre dans le détail ce que tu dois faire
    Citation Envoyé par ARCHIGOR Voir le message
    Mais existe t'il un logiciel configurable qu'il puisse automatiquement supprimé certaine données dans les lignes ?
    Je n'en connais pas, et s'il en existe il faudrait lui dire quoi faire et comment :-)
    Citation Envoyé par ARCHIGOR Voir le message
    Si non, je veux bien apprendre.
    Pour ce travail l'usage d'expression régulière est nécessaire, le reste du code sera assez 'simple' je pense.

    Citation Envoyé par ARCHIGOR Voir le message
    Ce que je voudrais supprimer:

    14|"BOESNER"|BORDEAUX|1|IN"|0|0"|COMPTAGE|03/13/2018 12:24:31|"1224|"1|0|140|8|192.168.100.100
    14|"BOESNER"|BORDEAUX|1|IN"|0|0"|COMPTAGE|03/13/2018 12:25:30|"1225|"1|0|141|8|192.168.100.100
    Sur 15 champs, 4 sont concernés, mais on ne connait pas le/les contenus possible.
    Le premier champ à matcher est-il tjr égal à 'BOESNER' , le second et troisième tjr à '0', le champ date contient tjr de la même date ou on n'en tient pas compte comme les autres champs ?
    Le quatrième champ doit-il être filtré sur toutes les valeurs ou sur certaines valeurs ? dans ce dernier cas lesquelles sont-elles ? Débutent-elles toujours à 1 ? sur 4 chiffres ?
    Le risque si tu ne précises pas ces points est que l'expression régulière filtre des lignes qu'elle ne devrait pas
    Citation Envoyé par ARCHIGOR Voir le message
    En sachant que le nom du document n'est jamais le même exemple (il y aura que la date qui changera):
    LDM_PC.BOESNER.2018-03-13.13-28-23.dat
    On peut filtrer le nom de fichier sur le même principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ébauche
    'LDM_PC.BOESNER.2018-03-13.13-28-23.dat' -match 'LDM_PC.BOESNER.(.*).dat'
    Ici aussi si on veut un filtre plus précis il faut connaitre le format de date accolé au nom de fichier, par exemple 7 mn sera codé '-07-' ou '-7-' ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    De ce que je vois le fichier semble respecter une structure de type csv

    Pourquoi pas un "import-csv" -> "select-object" -> "export-csv" ?

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    De ce que je vois le fichier semble respecter une structure de type csv
    Oui effectivement, j'y ai pensé.
    Dans ce cas on code les exclusions directement en Powershell, pas besoin de regex. De débuter la programmation par les regex n'est pas le chemin le plus facile :-)
    Mais le pb des specs 'floues' demeure...

  7. #7
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Si le BAT est une option :


    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
     
    set "$fichier=fichier.dat"
     
    for /f "tokens=1-15 delims=|" %%a in (%$fichier%) do echo %%a^|%%c^|%%d^|%%e^|%%h^|%%i^|%%k^|%%l^|%%m^|%%n^|%%o

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  8. #8
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    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
    PS C:\Users\walid\Desktop> cat .\file.dat
     
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:25:30|1225|1|0|141|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:50:31|1350|10|0|151|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/20113:56:30|1356|11|0|152|8192.168.100.100
     
    PS C:\Users\walid\Desktop> cat .\file.dat | % {( $_.split('|')[0,2,4,7,8,10,11,12,13,14]) -join '|'}
     
    14|BORDEAUX|IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100
    14|BORDEAUX|IN|COMPTAGE|03/13/2018 12:25:30|1|0|141|8|192.168.100.100
    14|BORDEAUX|IN|COMPTAGE|03/13/2018 13:50:31|10|0|151|8|192.168.100.100
    14|BORDEAUX|IN|COMPTAGE|03/13/20113:56:30|11|0|152|8192.168.100.100
    PS C:\Users\walid\Desktop>

  9. #9
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    De débuter la programmation par les regex n'est pas le chemin le plus facile :-)
    salut Laurent,

    je suis de ton avis mais aussi il faut ajouter à celà que les regexes de .NET dans ce cas bien précis manquent de la flexibilité des PCRE par exemple les Defintions de fonction qui peuvent rendrent la syntaxe des regexes plus simple...pour palier à ce problème on peux créer dynamiquement le pattern..une chose du genre

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PS C:\Users\walid\Desktop> $part = '([^\|]+)'
    PS C:\Users\walid\Desktop> $parts = ($part + '\|') * 14 + $part
    PS C:\Users\walid\Desktop> cat .\file.dat | % { $_ -replace $parts,'$1|$3|$4....'  }

    puis on met le numéro de bloc qui nous interessent directement $1,$2,...etc

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous.

    Désoler de ma réponse tardive.

    Tout d'abord ce que je veux réaliser c'est :

    1 - Modifier un fichier .dat puis l'envoyer dans un autre dossier.

    2 - Que la modification du fichier s'exécute automatiquement, et recommence à chaque nouvelle réception d'un fichier .dat

    3 - Dans le fichier que je modifie, il sera toujours structuré de la même manière.
    Mais il y aura plusieurs lignes à modifié, le nombre de lignes sera aléatoire de 1 minimun à 20 voir plus.

    4 - Le nom du fichier restera le même, il y a juste la date et l'heure qui change (LDM_PC.None.2018-03-12.17-28-49.dat)
    Date Heure


    Le fichier se définit comme cela: (les mots et chiffres entre les piontillés sont à supprimés)

    14|"BOESNER"|BORDEAUX|1|IN"|0|0"|COMPTAGE|03/13/2018 12:24:31|"1224|"1|0|140|8|192.168.100.100
    14|"BOESNER"|BORDEAUX|1|IN"|0|0"|COMPTAGE|03/13/2018 12:25:30|"1225|"1|0|141|8|192.168.100.100


    Les éléments à supprimé:

    - "BOESNER" le champs n°2 sera toujours égale à BOESNER

    - "|0|0" le champs n°6 et 7 sera toujours égale aux même chiffres (mais je voudrais aussi supprimé les deux délimitateurs en plus "|0|0" )

    - "1224|" le champs n°10 c'est l'heure en format numérique donc elle sera toujours composé de 4 chiffres mais différentes à chaque fois. il faut supprimé le délimitateur "1224|"


    Le format de la date sera toujours -05- ou -03- jamais -3- ou -5-

    Aprés pour la programmation sur quelle logiciel je dois me télécharger ou je peux faire directement sur wordpad ?

    Je reste à votre disposition,

    Cordialement ARCHIGOR

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Il y a déjà eu plusieurs propositions.
    Laquelle as tu retenue et ou en est ton ébauche de développement ? Rencontre tu des difficultés particulières pour son implémentation ?

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci pour le complément d'info je regarde ça demain.
    Citation Envoyé par ARCHIGOR Voir le message
    Après pour la programmation sur quelle logiciel je dois me télécharger ou je peux faire directement sur wordpad ?
    Si tu veux te lancer dans PowerShell, VSCode et l'extension associée est un bon début, si c'est occasionnel, Worpad peut suffire ainsi tu te concentres sur le langage.

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    A l'origine je pensais que tu voulais filtrer des lignes et pas les réécrire selon des critères
    Une ébauche :
    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
     
    <#
    Les éléments à supprimer:
     
    - "BOESNER" le champs n°2 sera toujours égale à BOESNER
     
    - "|0|0" le champs n°6 et 7 sera toujours égale aux même chiffres (mais je voudrais aussi supprimer les deux délimiteurs en plus "|0|0" )
     
    - "1224|" le champs n°10 c'est l'heure en format numérique donc elle sera toujours composé de 4 chiffres mais différentes à chaque fois. il faut supprimer le délimiteur "1224|"
     
     
    Le format de la date sera toujours -05- ou -03- jamais -3- ou -5-
     
    Avant :
     14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100
     
    Après :
     14|BORDEAUX|IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100
    #>
     #fichier de test
    $File='C:\Temp\Datas.dat' 
    @"
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|0111|1|0|140|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:25:30|1225|1|0|141|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:50:31|1350|10|0|151|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 13:56:30|1356|11|0|152|8|192.168.100.100
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|2222|1|0|140|8|192.168.100.100
    "@ > $File
     
    [string[]]$Headers =1..15|%{"P$_"}
    $Objects= Get-Content $File-
               Convertfrom-Csv -Delimiter '|' -Header $Headers
     
    $result=foreach ($Current in $Objects)
    {
      if ( ($Current.P2 -eq 'BOESNER') -and ($Current.P6 -eq '0') -and ($Current.P7 -eq '0'))
      {
         #supprime les champs 6,7 et 10
        $TabOfString=Select-Object -InputObject $Current -Property P1,P2,P3,P4,P5,P8,P9,P11,P12,P13,P14,P15 |
                             ConvertTo-Csv -Delimiter '|' -NoTypeInformation
     
        #reformate la seconde ligne et l'émet dans le pipeline
        $TabOfString[1].Replace('"','')
      } 
    }  
     
    $result
    # 14|BOESNER|BORDEAUX|1|IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100
    # 14|BOESNER|BORDEAUX|1|IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100
    # 14|BOESNER|BORDEAUX|1|IN|COMPTAGE|03/13/2018 12:25:30|1|0|141|8|192.168.100.100
    # 14|BOESNER|BORDEAUX|1|IN|COMPTAGE|03/13/2018 13:50:31|10|0|151|8|192.168.100.100
    # 14|BOESNER|BORDEAUX|1|IN|COMPTAGE|03/13/2018 13:56:30|11|0|152|8|192.168.100.100
    # 14|BOESNER|BORDEAUX|1|IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.1
    Le code reprend les principes des solutions déjà proposés, mais en plus verbeux et est basée sur une construction d'objet intermédiaire.
    Si les contrôles sur les champs sont inutiles la solution de I'm_HERE est préférable.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Oui je veux toujours filtrer les lignes en supprimant le bloc 2, 4, 6, 7 et 10
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100

    Pour arriver à ce résultat:
    14||BORDEAUX||IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100

    Mais avec votre programmation powershell, elle ne lance pas en boucle.

    Ce que je voudrais si possible c'est à la réception de mon ficher .dat il soit transformer et envoyer dans un autre fichier
    et que ça se relance en boucle

    Voila un fichier que je reçoit via informatique: (A chaque reception d'un fichier il peut y avoir plus de ligne ou moins de ligne)
    Nom : ldm_pc fichier de base.PNG
Affichages : 1615
Taille : 47,1 Ko

    et le résultat que je voudrais avoir:
    Nom : ldm_pc fichier converti.PNG
Affichages : 1598
Taille : 43,3 Ko


    et d'avoir un programme éxecutable qui ne s'arrete jamais de convertir les fichiers que je réceptionne automatiquement

    Cordialement

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ou plus simplement sur une ligne il y a 97 caractêres (chiffre, lettre...)
    14|BOESNER|BORDEAUX|1|IN|0|0|COMPTAGE|03/13/2018 12:24:31|1224|1|0|140|8|192.168.100.100

    Peut on via programmation dire de supprimé les caractères 4-10, 21, 25-28, 58-62 sur chaque ligne?

    Cordialement

  16. #16
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ARCHIGOR Voir le message
    Mais avec votre programmation powershell, elle ne lance pas en boucle.
    Oui, car ce n'est pas un programme complet, juste le principe à adapter à ton besoin.
    C'est à toi de coder le reste.
    Citation Envoyé par ARCHIGOR Voir le message
    Ce que je voudrais si possible c'est à la réception de mon ficher .dat il soit transformer et envoyer dans un autre fichier
    et que ça se relance en boucle
    Il faut coder bien plus dans ce cas, par exemple autour d'un FileWatcher
    A priori il faut écrire trois fonctions, une de surveillance, une de transformation et une de copie (move).
    Citation Envoyé par ARCHIGOR Voir le message
    Peut on via programmation dire de supprimé les caractères 4-10, 21, 25-28, 58-62 sur chaque ligne?
    Oui, il faut dans ce cas considérer la ligne comme un tableau de caractères, mais de supprimer des propriétés est préférable.

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci pour ces informations

    Par contre avec les codage de tout le monde je n'arrive pas à obtenir ce résultat :

    14||BORDEAUX||IN|COMPTAGE|03/13/2018 12:24:31|1|0|140|8|192.168.100.100

    ce que j'ai supprimé c'est "boesner" "1" "|0|0" "|1224"
    sur "|0|0" et "|1224" j'ai du supprimé des délimitateur |
    car sinon mon logiciel n'arrive pas à exploiter les données du fichier

  18. #18
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Remplace le code de la boucle Foreach avec celui-ci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $result=foreach ($Current in $Objects)
    {
      if ( ($Current.P2 -eq 'BOESNER') -and ($Current.P6 -eq '0') -and ($Current.P7 -eq '0'))
      {
         #supprime les champs 6,7 et 10
        $TabOfString=Select-Object -InputObject $Current -Property P1,@{name='P2';E={''}},P3,@{name='P4';E={''}},P5,P8,P9,P11,P12,P13,P14,P15 |
           ConvertTo-Csv -Delimiter '|' -NoTypeInformation
     
        #reformate la seconde ligne et l'émet dans le pipeline
        $TabOfString[1].Replace('"','')
      } 
    }

  19. #19
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,




    d'abord il faut au moins connaitre les bases de l'outil qu'on veux manipuler...voici un petit code que je n'ai pas tester, il s'agit une boucle infini qui va scanner un dossier $dat_folder et va chercher tous les fichier *.dat que leur noms commencent par 'LDM_PC.BOESNER' puis va modifiers les données grâces aux regexes et le resultat obtenu va être déplacer vers $destination...encore une fois il faut le tester car j'ai juste coder sans tests


    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
     
    $dat_folder = "$home\desktop"
    $destination = "$env:temp\lol"
     
    # attention manque système de verification de chemin, il faut le créer 
    set-location $dat_folder
     
     
    $part = '([^\|]+)' 
    $parts = ($part + '\|') * 14 + $part
     
    # creation de la ligne de texte ici vous êtes libre de réarranger comme bon vous semble
    $replc = '$1||$3||$5|$8|$9|$11|$12|$13|$14|$15'
     
     
    # je deteste les boucles while($true) et/ou les for draculas (;;)
    function loop {
       param([scriptblock]$scriptblock)
       while($true) { &$scriptblock }
    }
     
     
    loop {
       if($datfile = get-item 'LDM_PC.BOESNER*.dat')
       {
             $destPath = join-path $destination $datfile.Name
             $content = Get-Content -Path $datfile.fullname -ReadCount 1000 | foreach-object {  $_ -replace $parts,$replc }
             $content | out-file $destPath
             if(test-path $destpath)
             {
                 write-host "copie de $($datfile.fullname) -> $destpath"
                 # attention on supprime le fichier dat c'est une solution radicale mais si tu veux une autre approche tu peux rectifier le code
                 remove-item $datfile.fullname
             }
       }
    }

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bien le bonjour,

    Merci pour ce codage,

    J'ai essayé divers chose mais j'ai toujours des erreurs

    Code : 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
    $dat_folder = "${C:\Users\ARCHIGOR\Documents\euroseccom\document\compteur de passage synergie\scriptpowershell}"
    $destination = "${C:\Users\ARCHIGOR\Documents\euroseccom\document\compteur de passage synergie\destination scriptpowershell}"
     
    # attention manque système de verification de chemin, il faut le créer 
    set-location $dat_folder
     
     
    $part = '([^\|]+)' 
    $parts = ($part + '\|') * 14 + $part
     
    # creation de la ligne de texte ici vous êtes libre de réarranger comme bon vous semble
    $replc = '$1||$3||$5|$8|$9|$11|$12|$13|$14|$15'
     
     
    # je deteste les boucles while($true) et/ou les for draculas (;;)
    function loop {
       param([scriptblock]$scriptblock)
       while($true) { &$scriptblock }
    }
     
     
    loop {
       if($datfile = get-item 'LDM_PC.BOESNER*.dat')
       {
             $destPath = join-path $destination $datfile.Name
             $content = Get-Content -Path $datfile.fullname -ReadCount 1000 | foreach-object {  $_ -replace $parts,$replc }
             $content | out-file $destPath
             if(test-path $destpath)
             {
                 write-host "copie de $($datfile.fullname) -> $destpath"
                 # attention on supprime le fichier dat c'est une solution radicale mais si tu veux une autre approche tu peux rectifier le code
                 remove-item $datfile.fullname
             }
       }
    }
    Voilà mes erreurs

    Mon fichier se trouve en C:\Users\ARCHIGOR\Documents\euroseccom\document\compteur de passage synergie\scriptpowershell
    et je voudrais l'envoyer en C:\Users\ARCHIGOR\Documents\euroseccom\document\compteur de passage synergie\destination scriptpowershell


    j'ai l'erreur suivante Nom : errorimpossibl de lier l'argumument au paramètre.PNG
Affichages : 1655
Taille : 94,3 Ko

    Encore merci pour votre aide, j'avance au but!

    Cordialement ARCHIGOR

Discussions similaires

  1. [VBA-E]Ecriture de données dans un fichier texte
    Par osito57 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/08/2017, 19h42
  2. Extraction de données dans un fichier texte en VB6 !
    Par rockroa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/06/2006, 16h00
  3. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  4. extraire certaines données d'un fichier texte
    Par davz88 dans le forum C++
    Réponses: 11
    Dernier message: 26/03/2005, 13h00
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

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