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 :

Suppression d'une chaine de caractères [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    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 : 326
    Par défaut Suppression d'une chaine de caractères
    bonjour
    Bonjour,
    je cherche a supprimer des tous les caractères après "exit" dans un fichier texte.
    Mon problème est qu'il y a plus de 100 fichiers qui sont regroupés dans un fichier Liste.txt

    Liste.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\REPORT\Extract\TEST1.sql
    C:\REPORT\Extract\TEST2.sql
    C:\REPORT\Extract\TEST3.sql
    C:\REPORT\Extract\TEST4.sql
    .....
    le problème est que sur chacun de ces fichiers des caractères se sont insérer après le terme "exit".
    Je cherche un script qui me supprimerait les caractères (caractères, retour chariot.....) se trouvant après le terme "exit" et prenant en compte la liste des fichiers listés dans le fichier liste.txt

    merci pour votre aide

  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
    Billets dans le blog
    1
    Par défaut
    Salut,
    même si tes explications semblent suffire un exemple ou plusieurs :-) seraient les bienvenues. Par exemple avant et après.
    Est-ce qu'il existe + occurrences du mot 'exit' dans le fichier ?
    Quel est l'encodage des fichiers à parser ?
    Si ce n'est pas indiscret, ces fichiers proviennent d'un autre OS ou sont issus d'une extraction ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    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 : 326
    Par défaut
    Je sais pas trop ce qui s'est passé

    j'ai des fichier d'extraction du type

    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
    whenever SQLERROR exit SQL.SQLCODE
    conn XXXXXXXXX/"PASSWORD"@PROG
    alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS';
    set colsep ';'
    set echo off
    set heading off
    set feedback off
    set pages 0
    set linesize 5000
    set pagesize 0
    set sqlprompt ''
    set trimspool on
    set headsep off
    spool C:\TEMP\test_extraction.csv
    prompt NUMERO;....
    SELECT
      ....
    FROM
       TEST2 T1
       LEFT OUTER JOIN TEST2 T2 ON T2.NUMERO = T1.NUMERO
    WHERE
      T2.CLOSE_DATE >= 'D-JJ/MM/AAAA' and T2.CLOSE_DATE < 'F-JJ/MM/AAAA';
    spool off
    
    exit
    a la fin des fichiers j'ai des caracteres qui se sont mis de facon aléatoire sans logique, j'aimerai épuré les fichiers
    j'ai tente de faire un script via vba mais le fait d'ouvrir via ofice perturbe le traitement.

    je voulais supprimer tous les caracteres apres "exit" et la fin du fichier.


    exemple d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    s7&ÍÑ÷#¸J's¶ÆŒçÅÏáðÌ››ŸeP
    Ïlùa°TCoÞksø,~omUÉ^p„ø0ùRWiÈÔD%LT\5fêÕB]¡¡2Üc9n£ÿH1….Z¸ÇS˜¸{ÙZ³ÓPlÄkdküêÌe#ê™$ʱZd71sƒyþL1…NÚ$¢jÂi¯4K³µÌ¿Ò¬Ïì®êÕÕŸþÆ*Ô “x 2
    •+¼”2ÝÎøcá%ôÑ‚Bf¡ÂòP˜*ey@I7ëW»#A!žjäÇ1
    ‹„rEÌUa@&÷ޱš0ƒU[Š,ì:ÝI<M±uhÌÖåØàòFô4{ŒŸÙŸ(}ÿÇ*Ê2È4O)’Ñ´± “€ÊDv1}•³¶±Ä€uUø€$Æú™8Ðl]Öïñ8PþÿLH “H™Rn2p0Û™»f²TxÕP®š{2M¦n°g’\‘úó…t;Â5Nü3®Cæ—ÒÏT(dŒ¬Œ~X›ál7žêÝT§Î¶[:2—{XÞqT¡“$Æ®0È3[K5—'ˆNAÿL&sTƒ\®
    ¡Sø“
    .....
    
    „f‚󌟒**…ztcÙe±ƒHæÿ•±*•~ŒuäM¼åh5(óg”-Ôš]‰¡êõ@òEÕ@ÉÜ%a—Ïû;*Õ1æÞòá$"s2|2xnu±4¿k]ƒÅÊ£!Ö*o’ÜhÓÐÛ¯á?¹7$*@‹ÃåÞP¹]â¥Ìì[–”>dÒ²h.'iþZ>£ìÔUì
    j“½Kö—_·d÷t.Páß²±F*cÊü]'ÿ–yèýÊ¿…âíæà¨ äK˜caNY>5"ëk‡ø±¼mH¸¬mhp¹™ÿqÚp!CîãñÏÖò£ß÷w„¾lLÀ…ç«yÝ×C£Pâ;	¸ÜÔ9mù·oÊS7J)S
    ;^Þ•²Ô`“#Bça_E,’ǧ™Àº@òôÑŽ%Т÷2´Ü[¨Ï!Kc€ªroE8.¼ã3ÎY…˜õÊÛ‰Y–cù˜¼Zæ÷3¯Ö5™±ìOxµí`t8üó¢À‘¸ÒfhläÔëñpi–,Û«1k´¤Y9¡o쪲öæÒ–6ë*´YÈd¨s·´Y_w½ÑÌw¥ëW$kM›ÉhÚF(‹I™%MãÐð¸XžøÆ3×rj]…S«Ô®€¡œZÂŽïB±õ¡^m¼ªÒeV¤·‰RnûWÜвe!5L”…Á”•-¦BïÏH·iÖ^-[Œp$ój£oÅ®©¨Ýt‹³~ÃÎŽÜRv
    Wr1̉2vTTHšD
    †Ùq¾Ë’û]A*Ó™\Yæ*ñ+WÖ5h£š‰sº©Í•ÇAL¤©FO3¥ Ìq '}MɎ땨
    Tous les fichiers n'ont été obligatoirement modifiés

  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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laurent27530 Voir le message
    j'ai tente de faire un script via vba mais le fait d'ouvrir via ofice perturbe le traitement.
    Si tu fais un Get-Content sur ces fichiers tu arrives à les lire sans erreur ? peux-tu lire la ligne exit sur chacun ?
    N'ayant pas de fichier de test il est préférable de le savoir avant de proposer qq chose.

  5. #5
    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
    Billets dans le blog
    1
    Par défaut
    Tu peux déjà tenter ceci:
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Foreach ($Line in get-content 'c:\temp\datassql.txt')
    {
     write-Debug $Line
      if ($line -notmatch '^\s*exit\s*')
      {write-output $Line}
      else
      {
         write-output $Line
         break
      }
    }
    J'ai un doute sur la regex, peut être ceci '^\s*exit\s*$' mais je ne sais pas si le séparateur de ligne est toujours présent sur la ligne contenant 'exit'...

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    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 : 326
    Par défaut
    Tous les fichiers s'ouvrent mais j'ai des fichiers 11 Mo au lieu 1 ko
    Je n'ai qu un exit par fichier.
    le seul probleme reelle pour moi est que j'ai un nombre important de fichier et les manipulations sont fastidieuse manuellement
    J'ai eu plus 400 lignes de rajouter sur un que j'ai traité manuellement.

    mon idée de compter le nombre de caractere total du fichier et de supprimer le delta entre la valeur trouve et la position "exit" est elle la bonne ?

    je suis parti sur cette idee pour gérer le fait qu'aucun caractère n'avait été rajouté sur certains fichiers.

  7. #7
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laurent27530 Voir le message
    mon idée de compter le nombre de caractère total du fichier et de supprimer le delta entre la valeur trouve et la position "exit" est elle la bonne ?
    C'est une solution.
    Le test que je t'ai proposé est rapide à coder et à comprendre et ne s’embarrasse pas de calcul de position dans un tableau d'octets.
    Citation Envoyé par laurent27530 Voir le message
    je suis parti sur cette idée pour gérer le fait qu'aucun caractère n'avait été rajouté sur certains fichiers.
    Pour ceux là le code proposé ne changera rien, c'est un traitement de trop, mais si c'est un pc qui le fait ça ne me gêne pas :-)

    Et pour ma remarque sur la regex on peut aussi faire ainsi :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Foreach ($Line in get-content 'c:\temp\datassql.txt')
    {
     write-Debug $Line
      if ($line -notmatch '^\s*exit\s*')
      {write-output $Line}
      else
      {
         write-output 'exit'
         break
      }
    }
    pour traiter tous les fichiers il faut une boucle imbriqué et envoyer les objets émis par le Foreach dans un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach {} |set-content
    foreach {} > file
    Tu peux t'inspirer de ceci qui permet de garder le nom de fichier d'origine :
    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
     
    #Remove-AuthenticodeSignature.ps1
    Filter Remove-AuthenticodeSignature{
    #([Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding] $Encoding="ASCII")
     
     
       function Parse([String] $FileName)
       { #renvoi toutes les lignes sauf celles du bloc de signature
         $isSignatureBloc=$False
         Get-Content -Path $FileName|
         Foreach-Object { 
           switch ($_)  
           {
             "# SIG # Begin signature block"  {$isSignatureBloc=$True;continue}
             "# SIG # End signature block"    {$isSignatureBloc=$False;Continue}
     
             default {
               if ($isSignatureBloc -eq $false)
                  #On traite les lignes qui ne se trouvent pas dans le bloc de signature 
                {$_}
             }#default
          }#Switch
         }#Foreach
       }#Parse
     
     if ($_ )
     {  
       #Récupére un nom de fichier créé par l'OS
      $TempFile = [IO.Path]::GetTempFileName()
      $FullPath=Resolve-Path "$_"
      Write-Debug "$TempFile"
      Write-Debug "$FullPath" 
     
     
       #Extrait toutes les lignes sauf la signature dans un fichier temporaire 
      Parse "$FullPath"|Set-Content "$TempFile"
     
       #Ecrase le fichier d'origine à partir du fichier temporaire
       #$FileInfo.Replace ne fonctionne pas car %Temp% 
       #peut être sur un disque différent de celui de la source :/ 
      Get-Content "$TempFile"|Set-Content "$FullPath" 
      Del "$TempFile" 
     }
     else {Write-Error "[Remove-AuthenticodeSignature] Ce filtre a reçu une donnée `$null du pipeline."}
    }
    Le mot clé Filter est identique à une Fonction déclarant uniquement le bloc process ce qui permet de faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dir *.ps1|Remove-AuthenticodeSignature
    C'est du code PS version 1 compatible avec la v2 et +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression d'une partie d'une chaine de caractere
    Par laurent27530 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/07/2015, 15h12
  2. Réponses: 1
    Dernier message: 24/03/2014, 08h41
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. Réponses: 3
    Dernier message: 31/01/2005, 23h18
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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