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 :

Découpage d'un fichier en plusieurs selon critères [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut Découpage d'un fichier en plusieurs selon critères
    Bonjour tout le monde,

    Je viens vers vous, car je ne trouve pas de solution viable pour ma problèmatique.

    J'ai besoin de découper un fichier sur critère.
    Dans ce fichier il y a plusieurs blocs, commençant par "{1:F01" et terminant par "-}"
    Je voudrais récupérer chaque bloc dans des fichiers séparés

    Le fichier se présente comme suit :


    {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I950MXXXXXXXXXXXXXX}{4:
    :20:REL000058876/001
    :25:OTHER
    :28C:00217/001
    :60F:OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    OTHER
    :62F:OTHER
    :64:OTHER
    -} {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I95OHTER}{4:
    :20:REL000058877/001
    :25:OTHER
    :28C:OTHER
    :60F:OTHER
    :62F:OTHER
    :64:OTHER
    -} {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I95OHTER}{4:
    :20:REL000058878/001
    :25:OTHER
    :28C:OTHER
    :60F:OTHER
    :61:OTHER
    OTHER
    :61:OHTER
    OTHER
    :61:OTHER
    OTHER
    :61:OHTER
    OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    other
    :62F:OTHER
    :64:OTHER
    -} {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I95OTHER}{4:
    :25:other
    :28C:other
    :60F:other
    :62F:other
    :64:other
    -}
    En vous remerciant par avance

    Rakhann

  2. #2
    Membre confirmé Avatar de Superzest 76
    Homme Profil pro
    Automaticien
    Inscrit en
    Septembre 2018
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 144
    Points : 519
    Points
    519
    Par défaut
    Citation Envoyé par rakhann974 Voir le message
    Bonjour tout le monde,

    Je viens vers vous, car je ne trouve pas de solution viable pour ma problèmatique.

    J'ai besoin de découper un fichier sur critère.
    Dans ce fichier il y a plusieurs blocs, commençant par "{1:F01" et terminant par "-}"
    Je voudrais récupérer chaque bloc dans des fichiers séparés


    Rakhann

    Une solution a addapter
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    
    '---------------------------------------------------------------------------------------------------------------
    '
    '						Sauvegarde de la persone logger dans un fichier logg
    '
    '--------------------------------------------------------------------------------------------------------------
    'declaration de variable
    Dim ContenuFichier ,fichier , Badge , Newfichier
    Dim TblColonnes
    Dim BADGElogg,SuprLine
    Dim MotRechercher
    Dim T , fso
    Dim Chemin
    'Preparation de l'environement 
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'Ouverture du fichier
    Set fichier = fso.opentextfile("Ton chemin", 1)
    'Permet de lire le contenue du fichier 
    ContenuFichier = fichier.ReadAll
    'Ferme le dossier 
    fichier.Close
    Set fichier = Nothing
    'Declatation de Tblligne tableau qui permet de stocker les lignes 
    Dim TblLignes
    ' Permet séparer chaque ligne du fichier badge.txt et de les sauvegarder dans un tableau
    TblLignes = Split(ContenuFichier,vbNewLine)
    	For T = 0 To UBound(TblLignes)-1
    '------------------------------------------------
    '		Ecriture dans des .txt
    '-------------------------------------- --------
    const Forwriting = 2
    'Permet de généré un nom  de fichier différant a chaque block
    Chemin = "C:\Unchemin\Fichier" & T & ".txt"
    '*** Préparation de l'environnement	
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Définition du chemin d’accès 
    '*** Création du fichier texte
    Set NewFichier = fso.OpenTextFile( Chemin,Forwriting,True)
    '*** Ecriture des données de la variable "data" dans le fichier texte.
    NewFichier.Write(TblLignes)
    NewFichier.close
    Next
    
    '-----------------------------------------------------
    '			Fin du programe
    '-----------------------------------------------------
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    'The cake is a lie

  3. #3
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour Tout le monde.

    En 1er merci Superzest pour ta réponse, mais je n'ai pas su adapter ton code.

    Du coup, à force de recherche et de tâtonnement, j'ai réussi à avoir ce que je voulais (enfin presque), même si je suis persuadé que mon bout de code pourrai être amélioré.
    Le bon coté est que j'ai dû me mettre au REGEX

    Pour le presque : dans la fonction "F20Section" ce bout de code sert à récupérer une chaine de caractère àprés :20: et de Supprimer le "/", qui sera utilisé pour le renommage du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # comme exemple :
    $line20 = ":20:REL000058876/001"
    $line20 -match ':20:(.+)\/.+' | Out-Null
    $F20line = $Matches[1]
    PS C:\Script_Ps1> $Matches[1]
    REL000058876
    A la main, ça fonctionne, mais dés que je lance le script, la valeur "matches" est soit "-}" si je n'utilise pas "Clear-Variable matches", soit vide si je l'utilise.
    Je trouve cela étrange car la variable $line20 à la bonne valeur, avant le regex
    Pourriez-vous m'aider svp ?

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    
    
    
    
    PARAM(
    [STRING]$chemin,
    [string]$File
    )
    
    #cd C:\Bureau\travaux\ack-project\snp\
    #$chemin = "C:\Bureau\travaux\ack-project\snp\"
    
    
    
    
    $Contentfile = Get-Content "$chemin$File"
    
     $file -match '(.+)\.D' | Out-Null 
     $SITE = $Matches[1]
     $file -match '\.D(.+)' | Out-Null 
     $DATEJ = $Matches[1]
    
    
    #fonction renommage du fichier
    function F20section 
    {Param($NtbFile)        
        $filename = "$NtbFile"                                    
        $Fline20 = Get-Content "$filename"  
        $line20 = $fline20 -match ":20:"
         
        $line20 -match ':20:(.+)\/.+' | Out-Null
        $F20line = $Matches[1]
        #$F20line = $line20.Substring(4,12)
        $F20newname = "$SITE.$F20line.$num.$DATEJ.txt"
        Rename-Item  $filename -NewName $F20newname
     }
                                                                                                 
    
    $nbr = 0
    
    foreach ($line in $Contentfile) {
    
                 
            if ($line -match "{1:F01" ) {
                #on copie la dernière ligne du bloc dans le fichier
                if ($line -match "-}") {
                                    $line -match '-\}' | Out-Null 
                                    $lineend = $Matches[0]
                                    Add-Content $newfile $lineend
                                    Clear-Variable matches
                                    } 
                # on renomme le fichier                             
                if (Test-Path $tbfile) {F20section -NtbFile $tbfile}
    
                
    
                #on créé un fichier temporaire pour l'éclatement                       
                $num =  $nbr++  
                $BFCOI = "$SITE.$num.$DATEJ.txt"
                $newfile = new-item -type file "$chemin$BFCOI"
                $tbfile = @($newfile)
                                                           
                                        }
                                  
       # on ne garde que la valeur voulu de la ligne "entête"                            
       if ($line -match "{1:F01") {
                                    $line -match '\{1:F01(.+)' | Out-Null 
                                    $line = $Matches[0]
                                    }   
                                       
    
    Add-Content $newfile $line
    
                             }
    # on renomme le dernier fichier temporaire 
    if (Test-Path $tbfile) {F20section -NtbFile $tbfile}

    Encore merci d'avance

  4. #4
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Re,

    , je viens de tester mon regex en changeant la valeur aprés ":20:", et ça ne fonctionne plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # comme exemple :
    $line20 = ":20:ETCPT000114175"
    $line20 -match ':20:(.+)\/.+' | Out-Null
    $F20line = $Matches[1]
    PS C:\Script_Ps1> $Matches[1]
    $matches est vide

  5. #5
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    RE,

    En attendant de trouver une réponse pour le REGEX, j'ai contourné mon problème.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    PARAM(
    [STRING]$chemin,
    [string]$File
    )
    
    #cd C:\Bureau\travaux\ack-project\snp\
    #$chemin = "C:\Bureau\travaux\ack-project\snp\"
    
    
    
    
    $Contentfile = Get-Content "$chemin$File"
    
     $file -match '(.+)\.D' | Out-Null 
     $SITE = $Matches[1]
     $file -match '\.D(.+)' | Out-Null 
     $DATEJ = $Matches[1]
    
    
    #fonction renommage du fichier
    function F20section 
    {Param($NtbFile)
                
        $filename = "$NtbFile"                                    
        $Fline20 = Get-Content "$filename"  
        $line20 = $fline20 -match ":20:"  
         if ($line20 -match ":20:REL") {
                                        $F20line = $line20.Substring(4,12)
                                        } else {
                                        $F20line = $line20.Substring(4)
                                        }
        #$line20 -match '([A-Z])\w+' | Out-Null; $matches[0] 
        #$F20line = $matches[0]
        
        $F20newname = "$SITE.$F20line.$num.$DATEJ.txt"
        Rename-Item  $filename -NewName $F20newname
     }
                                                                                                 
    
    $nbr = 0
    
    foreach ($line in $Contentfile) {
    
                 
            if ($line -match "{1:F01" ) {
                                        #on copie la derniere ligne "-}" du bloc dans le fichier
                                        if ($line -match "-}") {
                                                                $lineend = "-}" 
                                                                Add-Content $newfile $lineend
                                                                } 
                                        # on renomme le fichier                             
                                        if (Test-Path $tbfile) {F20section -NtbFile $tbfile}
    
                #on créé un fichier temporaire pour l'éclatement                       
                $num =  $nbr++  
                $BFCOI = "$SITE.$num.$DATEJ.txt"
                $newfile = new-item -type file "$chemin$BFCOI"
                $tbfile = @($newfile)
                                                           
                                        }
                                  
       # on ne garde que la valeur voulu de la ligne "entête" sans le "-}"                           
       if ($line -match "{1:F01") {
                                    $line -match '\{1:F01(.+)' | Out-Null 
                                    $line = $Matches[0]
                                    }   
                                       
    
    Add-Content $newfile $line
    
                             }
    # on renomme le dernier fichier temporaire 
    if (Test-Path $tbfile) {F20section -NtbFile $tbfile}
    Mon code fait ce que je lui demande.

  6. #6
    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,

    juste pour le fun et suivant ton example de données une solution purement en regex:
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    PS C:\Users\walid\AppData\Local\Temp\test> cat .\file.txt
    
    {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I950MXXXXXXXXXXXXXX}{4:
    :20:REL000058876/001
    :25:OTHER
    :28C:00217/001
    :60F:OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    OTHER
    :62F:OTHER
    :64:OTHER
    -} {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I95OHTER}{4:
    :20:REL000058877/001
    :25:OTHER
    :28C:OTHER
    :60F:OTHER
    :62F:OTHER
    :64:OTHER
    -} {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I95OHTER}{4:
    :20:REL000058878/001
    :25:OTHER
    :28C:OTHER
    :60F:OTHER
    :61:OTHER
    OTHER
    :61:OHTER
    OTHER
    :61:OTHER
    OTHER
    :61:OHTER
    OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    OTHER
    :61:OTHER
    other
    :62F:OTHER
    :64:OTHER
    -} {1:F01xxxxxxxxxxxxxxxxxxxx}{2:I95OTHER}{4:
    :25:other
    :28C:other
    :60F:other
    :62F:other
    :64:other
    -} 
    PS C:\Users\walid\AppData\Local\Temp\test> ./sec.ps1
    PS C:\Users\walid\AppData\Local\Temp\test> ls
    
    
        Répertoire*: C:\Users\walid\AppData\Local\Temp\test
    
    
    Mode                LastWriteTime         Length Name                                                              
    ----                -------------         ------ ----                                                              
    -a----       11/17/2018   3:12 AM            177 000058876                                                         
    -a----       11/17/2018   3:12 AM            126 000058877                                                         
    -a----       11/17/2018   3:12 AM            270 000058878                                                         
    -a----       11/17/2018   2:46 AM            689 file.txt                                                          
    -a----       11/17/2018   3:12 AM            104 othe
    le code:

    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
    $content = Get-Content .\file.txt -Raw
    $rx = [regex]@'
    (?x)
     (?<Section>
          \{1:F01  
           .*? 
           \{4:\s*:
           # si les chars '20:REL' sont presents...
           (?(?=20:REL)
               # alors capture tout mais pas le litteral '/'
               20:REL (?<file>[^\/]+)
                 |
               # sinon capture juste les 4 chars qui suivent '[0-9]+:' 
               [0-9]+: (?<file>\S{4})
           )
         # bouffe tous les chars mais test avant chaque boucle si les chars qui suivent ne sont pas '-}' 
         (?>(?!-\})[\s\S])+
     )
    '@
    $rx.Matches($content) | % {$_.groups['Section'].value | Set-Content $($_.groups['file'].value)}


    les commentaires te permetteront de personnalisez le pattern

  7. #7
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour, i'm here.

    Quel maîtrise !!!

    Je me suis permis d'adapter ton script (en rouge) pour mon besoin :

    Pour info : aprés le ":20:", il peut y avoir "REL000058877/001" ou "ETCPT000114175"
    D’où ma modification
    J'avais besoin aussi de récupérer le début du nom du fichier (avant le ".D") et la fin du fichier (Aprés le ".D) pour le nom du fichier final.




    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
    
    PARAM(
    [STRING]$chemin,
    [string]$File
    )
    
    #$chemin = "C:\Bureau\travaux\ack-project\snp\"
    #$file = "Toto-Frie.D181119_00011164"
    
    $file -match '(.+)\.D' | Out-Null 
     $SITE = $Matches[1]
     $file -match '\.D(.+)' | Out-Null 
     $DATEJ = $Matches[1]
    
    
    $content = Get-Content "$chemin$file" -Raw
    $rx = [regex]@'
    (?x)
     (?<Section>
          \{1:F01  
           .*? 
           \{4:\s*:
           # si les chars '20:' sont presents...
           (?(?=20:)
               # alors capture tout mais pas le litteral '/'
               20: (?<file>\w+)
                 |
               # sinon capture juste les 4 chars qui suivent '[0-9]+:' 
               [0-9]+: (?<file>\S{4})
           )
         # bouffe tous les chars mais test avant chaque boucle si les chars qui suivent ne sont pas '-}' 
         (?>(?!-\})[\s\S])+
         -}
     )
    '@
    $rx.Matches($content) | % {$_.groups['Section'].value | Set-Content $("$site" + "." + ($_.groups['file'].value) + "." + "$DATEJ" + ".txt")}
    Merci beaucoup

  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
    Citation Envoyé par rakhann974 Voir le message
    Bonjour, i'm here.

    Quel maîtrise !!!

    Je me suis permis d'adapter ton script (en rouge) pour mon besoin :

    Pour info : aprés le ":20:", il peut y avoir "REL000058877/001" ou "ETCPT000114175"
    D’où ma modification
    J'avais besoin aussi de récupérer le début du nom du fichier (avant le ".D") et la fin du fichier (Aprés le ".D) pour le nom du fichier final.




    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
    
    PARAM(
    [STRING]$chemin,
    [string]$File
    )
    
    #$chemin = "C:\Bureau\travaux\ack-project\snp\"
    #$file = "Toto-Frie.D181119_00011164"
    
    $file -match '(.+)\.D' | Out-Null 
     $SITE = $Matches[1]
     $file -match '\.D(.+)' | Out-Null 
     $DATEJ = $Matches[1]
    
    
    $content = Get-Content "$chemin$file" -Raw
    $rx = [regex]@'
    (?x)
     (?<Section>
          \{1:F01  
           .*? 
           \{4:\s*:
           # si les chars '20:' sont presents...
           (?(?=20:)
               # alors capture tout mais pas le litteral '/'
               20: (?<file>\w+)
                 |
               # sinon capture juste les 4 chars qui suivent '[0-9]+:' 
               [0-9]+: (?<file>\S{4})
           )
         # bouffe tous les chars mais test avant chaque boucle si les chars qui suivent ne sont pas '-}' 
         (?>(?!-\})[\s\S])+
         -}
     )
    '@
    $rx.Matches($content) | % {$_.groups['Section'].value | Set-Content $("$site" + "." + ($_.groups['file'].value) + "." + "$DATEJ" + ".txt")}
    Merci beaucoup
    salut

    si tu veux inclure les chars -} dans ta recherche alors tu peux utiliser cette syntaxe au lieu del'impact sera important sur le temps d'execution environ 2 fois plus rapide en cas de succes et ~18 fois plus rapde en cas d'echec


    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
    $rx = [regex]@'
    (?x)
     (?<Section>
          \{1:F01  
           .*? 
           \{4:\s*:
           # si les chars '20:' sont presents...
           (?(?=20:)
               # alors capture tout mais pas le litteral '/'
               20: (?<file>\w+)
                 |
               # sinon capture juste les 4 chars qui suivent '[0-9]+:' 
               [0-9]+: (?<file>\S{4})
           )
         # bouffe tous les chars mais test avant chaque boucle si les chars qui suivent ne sont pas '-}' 
         (?>[^-]*|-(?!}))*
         -}
     )
    '@
    dans le premier cas on test pour chaque tour de boucle s'il y a les chars '-}' mais dans le deuxième cas on bouffe tout SAUF '-' suivi par '}'

  9. #9
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Merci pour tes conseils, j'en tiendrai compte lors de mes prochains développements.

    Pour mon cas, j'avais juste besoin d'avoir le "-}' à la fin de chaque fichier et donc plus simple de le rajouter comme je l'ai fait.

    En tout cas, c'est vraiment puissant le REGEX.

    Le travail de recherche en amont, ma façon de traiter mon projet et ta méthode, m'a permis d’énormément progresser.

    Maintenant le REGEX m'est un peu moins chinois.

    Merci beaucoup.

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

Discussions similaires

  1. Couper un fichier texte en plusieurs selon critères
    Par Philippe78910 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/11/2017, 16h27
  2. Découpage d'un fichier en plusieurs parties
    Par pi-2r dans le forum Linux
    Réponses: 6
    Dernier message: 09/09/2010, 16h09
  3. Réponses: 1
    Dernier message: 26/10/2009, 15h05
  4. Convetir un fichier en 2 selon critéres
    Par freestyler dans le forum Général Python
    Réponses: 11
    Dernier message: 12/06/2008, 21h31
  5. Eclater une colonne en plusieurs selon critère
    Par Tatoine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/07/2006, 11h19

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