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

Windows Discussion :

PowerShell - Traitement de fichier.txt


Sujet :

Windows

  1. #1
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut PowerShell - Traitement de fichier.txt
    Bonjour, je voudrai créer un script un peut complexe pour un traitement de fichier.txt
    Voila le script va se déconposer en plusieur étape, voila ce que j'avais fait en batch:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :: On créer la variable date au format 12\06\07:
    set datetimetmp=%date:~0,2%/%date:~3,2%/%date:~8,2%
     set datetimetmp=%datetimetmp: =%
    
    :: On récupére le numéro de la ligne ou se trouve la date du jour dans le fichier.txt:
    for /f "tokens=1 delims=:" %%i in ('type fichier.txt ^| findstr /i /n /c:"%datetimetmp%"') do set VrNubLigneDat=%%i
    
    :: On cherche les erreurs:
    for /f "skip=%VrNubLigneDat% tokens=1* delims= " %%i in ('type fichier.txt ^| findstr /i /c:"of which were"') do (
     if not %%i== 0 echo Il y a une erreur %%i
    )

    Donc voila ce que je veut faire:

    Etape 1: Je veut récupére la date sou cette forme 05\07\07 pas 05\07\2007

    Etape 2: Chercher le numéro de la ligne ou se trouve la date du jour, et placer le numéro de la ligne dans une variable

    Etape 3: Chercher toutes les ligne contenant la chaine de caractére "of which were ignored" en commancant le traitement a partir de la ligne ou se trouve la date du jour, et tester le premier caractére de chaqu'une des ligne contenant la chaine de caractére que je vien de cité, si le premier caractére et 0 ne rien faire, si le premier caractére n'est pas 0 afficher un message.


    Voici le fichier.txt:
    ---------------------------------- 11/06/07 ----------------------------------

    06:00:14 - DLL initialisation:-
    Flagword=0000011011101100
    Bit 0 clr = Raw data capture is disabled
    Bit 1 clr = Debug option is disabled
    01 c:\tsbload\bv.cdr
    input from filename 'c:\tsbload\bv.cdr'
    300 records received
    0 of which were ignored
    0 of which were faulty
    0 of which were busy

    ----------------------------------------------------------------------------------

    ---------------------------------- 12/06/07 ----------------------------------

    06:00:14 - DLL initialisation:-
    Flagword=0000011011101100
    Bit 0 clr = Raw data capture is disabled
    Bit 1 clr = Debug option is disabled
    01 c:\tsbload\bv.cdr
    input from filename 'c:\tsbload\bv.cdr'
    300 records received
    0 of which were ignored
    0 of which were faulty
    0 of which were busy

    ----------------------------------------------------------------------------------
    ---------------------------------- 13/06/07 ----------------------------------

    06:00:14 - DLL initialisation:-
    Flagword=0000011011101100
    Bit 0 clr = Raw data capture is disabled
    Bit 1 clr = Debug option is disabled
    01 c:\tsbload\bv.cdr
    input from filename 'c:\tsbload\bv.cdr'
    300 records received
    0 of which were ignored
    2 of which were faulty
    0 of which were busy

    ----------------------------------------------------------------------------------

    Sauriez vous m'aider ?

  2. #2
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    On ma doner ceci pour récupéré la date au format 04\08\07:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $today = [datetime]::now.tostring(" ;dd/MM/yy")
    $today
    Ca fonctione bien.

    Puis on ma donner ceci pour récupére le numéro de la ligne ou ce trouve la date du jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $line = (dir fichier.txt | select-string $today).linenumber
    $line
    Ca fontione aussi.

    Maitenant il me reste la deniére étape, sauriez vous m'aider ?

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    j'ai fais un petit script vite fait :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #retourne le nombre de lignes à vérifier
    function GetNumOfLines([string] $filepath)
    {
        $today = [datetime]::now.tostring("dd/MM/yy")
        
        $totalLines = (get-content $filepath).Length
        
        $dateLine = (dir $filepath | select-string $today).linenumber
        
        return $totalLines - ($dateLine - 1)
    }
    #retourne les lignes à vérifier, depuis la date du jour jusqu'à la fin du fichier
    function GetContent([string] $filepath)
    {
        $lines = GetNumOfLines($filepath)
        
        $content = Get-Content $filepath | Select-Object -last $lines
        
        return $content
    }
    #test si "x of which were ignored" est présent et si x != 0
    function GetProblem([string] $filepath)
    {
        $content = GetContent($filepath)
        
        $regex = [regex]"(?<num>[0-9]+) of which were ignored"
        
        if( $regex.IsMatch($content) )
        {
            $Match = $regex.Match($content)
            $value = $Match.Groups["num"].Value
            
            # si la phrase commence par "0" : pas de problèmes détectés
            if ($value -eq "0")
            {
                Write-Host "No Problem found !"
                return
            }        
            
            # sinon...
            foreach ($item in $content)
            {
                if ($regex.IsMatch($item))
                {
                    write-host "Problem found :" $item
                }
            }        
        }
    
    }
    Si tu as des questions, n'hésites pas.

  4. #4
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Bonjour et merci beaucoup

    Il est un peut long le script quand même, je suis sur qu'on peut faire plus simple, quelqu'un m'avai donner ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    param ($file)
    
    $today = [datetime]::now.tostring("ddMy")
    $ignored = get-content $file
    $line = (dir ignored.txt | select-string $today).linenumber
    $ignored[($line-1)..($ignored.length-1)] | where {$_ -match "of which were ignored" -and $_[0] -ne "0"} | foreach {"$today: $_"}
    C'est de ce scripr que j'ai récupérer les deux lignes qui fonctionne que j'ai citer plus haut, parce que le script ne fonctionne pas, il renvoi des erreurs.

    Tu dit vite fait alor tu code vite

Discussions similaires

  1. traitement dans fichier txt
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/05/2009, 22h54
  2. traitement de fichier TXT compliquer
    Par BuzzLeclaire dans le forum Langage
    Réponses: 3
    Dernier message: 02/04/2009, 11h13
  3. Batch : Traitement sur fichier txt
    Par vita83 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 13/09/2008, 08h08
  4. Traitement de fichier.txt
    Par koKoTis dans le forum Delphi
    Réponses: 3
    Dernier message: 05/07/2007, 14h35
  5. traitement de fichier TXT: mémoire insuffisante
    Par xherault dans le forum Delphi
    Réponses: 17
    Dernier message: 20/07/2006, 12h50

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