Question
Chercher un bloc dans un fichier
- Troxsa
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 30
- Remerciements reçus 0
il y a 4 ans 4 mois #29552
par Troxsa
Réponse de Troxsa sur le sujet Re:Chercher un bloc dans un fichier
Vous avez de la chance j'ai que ça a faire aujourd'hui lol
essayez avec ça
[code:1]$Files = Get-ChildItem -Path \".\fichier.txt\"
$FinalTable = @()
Foreach($file in $Files)
{
$fichier = Get-Content $file.FullName -Encoding Default
$result = $fichier | Select-String -Pattern \"--+.\",\"^The command completed successfully.$\"
for ($ii = 0; $ii -lt $fichier.Count; $ii++)
{
if($result[$ii] -match \"--+.\"«»)
{
$Header = $fichier[$result[$ii].LineNumber - 3] # Header
$IntDataStart = $result[$ii].LineNumber
$IntDataEnd = $result[$ii+1].LineNumber-2 # Fin d'un tableau
$Data = $fichier[$IntDataStart..$IntDataEnd]
for ($i = 0; $i -lt $Data.Count; $i++) {
$Status = $Data[$i].SubString(0,13)
$Local = $Data[$i].SubString(13,10)
$Remote = $Data[$i].SubString(23,($Data[$i].Length-23))
$FinalTable += [PSCustomObject ]@{
Status = $Status.Trim()
Local = $Local.Trim()
Remote = $Remote.Trim()
}
}
}
}
}
$FinalTable[/code:1]
c'est pas au point mais ça fonctionne, je vous laisse poursuivre <br><br>Message édité par: Troxsa, à: 17/12/19 15:25
essayez avec ça
[code:1]$Files = Get-ChildItem -Path \".\fichier.txt\"
$FinalTable = @()
Foreach($file in $Files)
{
$fichier = Get-Content $file.FullName -Encoding Default
$result = $fichier | Select-String -Pattern \"--+.\",\"^The command completed successfully.$\"
for ($ii = 0; $ii -lt $fichier.Count; $ii++)
{
if($result[$ii] -match \"--+.\"«»)
{
$Header = $fichier[$result[$ii].LineNumber - 3] # Header
$IntDataStart = $result[$ii].LineNumber
$IntDataEnd = $result[$ii+1].LineNumber-2 # Fin d'un tableau
$Data = $fichier[$IntDataStart..$IntDataEnd]
for ($i = 0; $i -lt $Data.Count; $i++) {
$Status = $Data[$i].SubString(0,13)
$Local = $Data[$i].SubString(13,10)
$Remote = $Data[$i].SubString(23,($Data[$i].Length-23))
$FinalTable += [PSCustomObject ]@{
Status = $Status.Trim()
Local = $Local.Trim()
Remote = $Remote.Trim()
}
}
}
}
}
$FinalTable[/code:1]
c'est pas au point mais ça fonctionne, je vous laisse poursuivre <br><br>Message édité par: Troxsa, à: 17/12/19 15:25
Connexion ou Créer un compte pour participer à la conversation.
- Christophe
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 4 ans 4 mois #29553
par Christophe
Réponse de Christophe sur le sujet Re:Chercher un bloc dans un fichier
Bonjour,
C'est un autre point de vue, beaucoup moins facile à comprendre pour moi, j'avoue.
Merci en tout cas pour l'effort et l'aide apportée.
Avec l'autre solution, j'y suis presque, je me bas un peu avec les substring ...
Christophe
C'est un autre point de vue, beaucoup moins facile à comprendre pour moi, j'avoue.
Merci en tout cas pour l'effort et l'aide apportée.
Avec l'autre solution, j'y suis presque, je me bas un peu avec les substring ...
Christophe
Connexion ou Créer un compte pour participer à la conversation.
- Christophe
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 4 ans 4 mois #29554
par Christophe
Réponse de Christophe sur le sujet Re:Chercher un bloc dans un fichier
Bonjour,
Avec l'aide apportée par les différents membres dans ce post, je suis arrivé à ce que je voulais :
[code:1]ForEach ($file in Get-ChildItem c:\temp\*.txt)
{
$fichier = Get-Content \"$file\" -Encoding Default
$result = $fichier | Select-String -Pattern \"--+.\",\"^The command completed successfully.$\"
Foreach($item in $result)
{
if($item.Line -match \"--+.\"«»)
{
$Header = $item.LineNumber - 3 # Header
continue
}
$fichier[($Header)..($item.LineNumber-2)] | Out-File \"c:\temp\tableau.txt\" -Append
}
}
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"Microsoft Windows Network\",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"
\",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"Status Local Remote Network\",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"OK\",\" \" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \" \",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \" \",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) | Where-Object { $_ } | Out-File \"c:\temp\tableau.txt\"
$result = Get-Content \"c:\temp\tableau.txt\" -Encoding Default
Foreach($item in $result)
{
$lettre = '\"' + $item.Substring(0,2) + '\",'
$i = $item.Length - 10
$chemin = '\"' + $item.Substring(10,$i) + '\"'
$laligne = $lettre + $chemin.TrimEnd() | Out-File \"c:\temp\resultat.csv\" -Append
}
[/code:1]
J'imagine qu'il y a certainement moyen de rendre cela plus efficace et sexy mais ça semble faire le \"taf\" nécessaire.
Je vais le tester sur 1100 fichiers, on va voir ce que ça donne
Merci à nouveau à tout le monde !!!!!
Christophe
Avec l'aide apportée par les différents membres dans ce post, je suis arrivé à ce que je voulais :
[code:1]ForEach ($file in Get-ChildItem c:\temp\*.txt)
{
$fichier = Get-Content \"$file\" -Encoding Default
$result = $fichier | Select-String -Pattern \"--+.\",\"^The command completed successfully.$\"
Foreach($item in $result)
{
if($item.Line -match \"--+.\"«»)
{
$Header = $item.LineNumber - 3 # Header
continue
}
$fichier[($Header)..($item.LineNumber-2)] | Out-File \"c:\temp\tableau.txt\" -Append
}
}
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"Microsoft Windows Network\",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"
\",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"Status Local Remote Network\",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \"OK\",\" \" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \" \",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) -replace \" \",\"\" | Out-File \"c:\temp\tableau.txt\"
(Get-Content \"c:\temp\tableau.txt\" -Encoding Default) | Where-Object { $_ } | Out-File \"c:\temp\tableau.txt\"
$result = Get-Content \"c:\temp\tableau.txt\" -Encoding Default
Foreach($item in $result)
{
$lettre = '\"' + $item.Substring(0,2) + '\",'
$i = $item.Length - 10
$chemin = '\"' + $item.Substring(10,$i) + '\"'
$laligne = $lettre + $chemin.TrimEnd() | Out-File \"c:\temp\resultat.csv\" -Append
}
[/code:1]
J'imagine qu'il y a certainement moyen de rendre cela plus efficace et sexy mais ça semble faire le \"taf\" nécessaire.
Je vais le tester sur 1100 fichiers, on va voir ce que ça donne
Merci à nouveau à tout le monde !!!!!
Christophe
Connexion ou Créer un compte pour participer à la conversation.
- Troxsa
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 30
- Remerciements reçus 0
il y a 4 ans 4 mois #29558
par Troxsa
Réponse de Troxsa sur le sujet Re:Chercher un bloc dans un fichier
ça donne quoi alors ?
Connexion ou Créer un compte pour participer à la conversation.
- Christophe
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 4 ans 4 mois #29561
par Christophe
Réponse de Christophe sur le sujet Re:Chercher un bloc dans un fichier
Bonjour,
J'y suis presque
Il me reste encore un soucis avec la lettre de lecteur qui est parfois décalée, pas au début de la ligne mais avec des espaces devant.
Je bidouille encore un peu ...
Christophe
J'y suis presque
Il me reste encore un soucis avec la lettre de lecteur qui est parfois décalée, pas au début de la ligne mais avec des espaces devant.
Je bidouille encore un peu ...
Christophe
Connexion ou Créer un compte pour participer à la conversation.
- Troxsa
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 30
- Remerciements reçus 0
il y a 4 ans 4 mois #29562
par Troxsa
Réponse de Troxsa sur le sujet Re:Chercher un bloc dans un fichier
OK
Vous pouvez faire une recherche avec REGEX en faisant des groupes puis reprendre les groupes pour les ajoutés dans chaque champs (enfin je me comprends pas facile a donner les explications)
Je peux vous faire un exemple je métrise pas beaucoup mais j'arrive a m'en sortir avec regex
si possible cliquez sur le petit pouce vers le haut ou vers le bas pour le karma, ça sers pas a grand chose mais c'est toujours valorisant !
Vous pouvez faire une recherche avec REGEX en faisant des groupes puis reprendre les groupes pour les ajoutés dans chaque champs (enfin je me comprends pas facile a donner les explications)
Je peux vous faire un exemple je métrise pas beaucoup mais j'arrive a m'en sortir avec regex
si possible cliquez sur le petit pouce vers le haut ou vers le bas pour le karma, ça sers pas a grand chose mais c'est toujours valorisant !
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.090 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Chercher un bloc dans un fichier