Question Extraire des données entre des marqueurs à partir de plusieurs fichiers

Plus d'informations
il y a 2 ans 7 mois #31246 par Jonathan
Bonjour,

J'annonce, je suis un grand débutant en powershell.
Est-il possible comme le sujet l'indique d'extraire des données (en sortie dans plusieurs fichiers) à partir de plusieurs fichiers positionnés dans un répertoire, ces données sont comprises entre des valeurs "[1" et "P]]".
Exemple de fichier :

Fichier 1 :
[1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD]P]]
[1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD][AAADDD][AAADDD]P]]

Fichier 2 (avec une variante, oui le "[1" n'est pas forcément en début de ligne: 
[1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD]P]]
[AAADDD]P]]                                                                                                                 [1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD][AAADDD][AAADDD]P]]

Je reste dans le coin pour peut être repréciser ma demande si besoin.
Merci pour vos aides.

Jonathan.
 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #31247 par Jonathan
J'arrive à faire cela mais je suis loin du compte :/...

récupérer dans la variable $OUT le contenu des fichiers *.OUT dans :\TEMP\XXX\IN\
$OUT = Get-Content "c:\TEMP\XXX\IN\*.out"

récupère le contenu de tout les fichiers c:\TEMP\XXX\IN\*.out dans le fichier c:\TEMP\XXX\toto2.txt
Get-Content "c:\TEMP\XXX\IN\*.out" | Out-file c:\TEMP\XXX\toto2.txt

sélectionne toutes les lignes avec "{1" et sortie fichier "toto.txt"
Select-String -Path "C:\temp\XXX\IN\*.out" -Pattern "{1" -Context 0 | Out-file c:\TEMP\XXX\toto.txt

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #31252 par Laurent Dardenne
Salut,
une piste à tester :
#Combinaison des exemples d'origine
$Texte=@'
[1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD]P]]
[1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD][AAADDD][AAADDD]P]]
[1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD]P]]
[AAADDD]P]]                                                                                                                 [1[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD][AAADDD][AAADDD]P]]
'@
 

#Texte de test
$Texte=@'
[1 UN [XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD]P]]
[1 DEUX [XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD][AAADDD][AAADDD]P]]
[1 TROIS [XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD]P]]
[AAADDD]P]]                                                                                                                 [1 QUATRE [XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[XXXXXX][AAADDD]
[AAADDD][AAADDD][AAADDD]P]]
'@
 
#https://docs.microsoft.com/fr-fr/dotnet/standard/base-types/regular-expression-options
#$regex=[Regex]::new('(?<=\[1).*?(?=P]])','SingleLine')

$DebutDeReconnaissance='\[1'
$FinDeReconnaissance='P]]'

#${ }  --> limite précisément le nom de variable Powershell.
$regex="(?s)(?<=${DebutDeReconnaissance}).*?(?=${FinDeReconnaissance})"
#$Regex='(?s)(?<=\[1).*?(?=P]])'

#Notes:
#
#Option de regex :  singleline
#(?s)

#Capture tous les caractères entre les deux textes de reconnaissance, et on capture le moins de caractère possible.
#.*?

#Assertions de préanalyse ( ce qui précède le texte recherché)
#https://docs.microsoft.com/fr-fr/dotnet/standard/base-types/backtracking-in-regular-expressions#lookahead-assertions
#(?<= )

#Assertions de postanalyse ( ce qui suit le texte recherché)
#(?= )'


Select-String $regex -input $Texte -AllMatches |
    ForEach-Object {$_.matches}
 

$Result=Select-String $regex -input $Texte -AllMatches |
            ForEach-Object {$_.matches.Value}

$Result.Count
#4

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.069 secondes
Propulsé par Kunena