Question Recuperer informations dans un fichier .txt

Plus d'informations
il y a 2 ans 1 semaine #32680 par ClementG
Bonjour étant débutant dans powershell je bloque sur un petit truc.

Je suis entrain d'écrire un script manipulant des informations dans des fichiers .txt.
Mais voila je bloque sur un point.

Je voudrais récuperer des informations bien précises dans un fichier txt. Je m'explique :

Le fichier est constitué ainsi :
(...)
azazaza
zazazaza
Données du serveur :
azazaz
azazaz
azaza
azaza

(...)
Données du serveur 2 :
aaaa
(...).

Je voudrais récuperer uniquement les informations situées entre "données du serveur" et "données du serveurs 2" grace a une commande powershell.

Get-content le fait il ?

De plus dans un second temps, j'ai un fichier avec des informations de ce type :

ABCD-données
ABCD-données2
ABCD-données3
(...)

Je voudrais récuperer toutes les lignes du fichier pour les mettres dans un nouveau fichier txt mais sans la partie "ABCD-" situé devant les données.
En gros le nouveau fichier sera composé comme ca :
données
données2
données3
(...)

Avez vous une idee de comment faire ?

Je vous remercie par avance pour votre aide :)

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

  • Julien Groizard
  • Visiteur
  • Visiteur
il y a 2 ans 1 semaine #32685 par Julien Groizard
Réponse de Julien Groizard sur le sujet Recuperer informations dans un fichier .txt
Hello,

Je te confirme bien que la cmdlet à utiliser est Get-Content permettant d'afficher le contenu d'un fichier.

Par contre, le script sera relativement complexe selon moi car il faut récupérer des infos différentes à plusieurs instants (lignes).

Je te propose un script permettant de récupérer les différentes données compactées dans un tableau :

$file = Get-Content .\data.txt -Encoding UTF8
$datas = @{} # répertoire de donnée
$data = @() # données
$i=0

foreach ($line in $file) {
if ($line -like "*Données du serveur*") { #nouvelle donnée à enregistrer
# la première ligne on aura pas de donnée à entrer
if ($i) {
$datas.Add($i,$data)
$data = @()
}
$i++
} else {
$data += $line
}
}
# ajout des dernières valeurs
$datas.Add($i,$data)

#Donnée finale
$datas

$nb=1 #numéro de donnée
$datas.Item($nb) # données de serveur numéro $nb



Concernant l'autre script, c'est beaucoup plus simple car il s'agit de récupérer le contenu puis les renvoyer directement en remplaçant le texte "ABCD-" par rien :

$data=@()
Get-Content .\data2.txt -Encoding UTF8 | % {
$data+=($_ -replace "ABCD-","")
}
Write-Output $data > .\data2_new.txt


Il se peut que le premier script ne teste pas le "like" avec les accents. Il faut mettre le format du script en Windows 1252.

En espérant aider :)

Bonne journée à toi

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

Plus d'informations
il y a 2 ans 1 semaine - il y a 2 ans 1 semaine #32690 par ClementG
Merci pour ton retour !

J'ai bien compris que ma première demande était assez compliquée pour mon niveau de débutant sur powershell.

Cependant ton deuxième script est super efficace et compréhensible ! J'ai une petite question.

L'élément que je veux retirer est du type " ABC-ABCDEF\" et quand je remplace ton code par ce que je veux retirer j'ai un message d'erreur le "\" me genere ce message :

Le modèle d’expression régulière  ABC-ABCDE\ n’est pas valide.
Au caractère \XX\XXX\XXXX\ mot.ps1:3 : 1
+ $data+=($_ -replace " ABC-ABCDE\","")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : ( ABC-ABCDE\:String) [], RuntimeException
    + FullyQualifiedErrorId : InvalidRegularExpression



Je sais pas si tu as une petite idée ? Je te remercie par avance :)

Bonne journée à toi,
Dernière édition: il y a 2 ans 1 semaine par ClementG.

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

  • Julien Groizard
  • Visiteur
  • Visiteur
il y a 2 ans 1 semaine #32692 par Julien Groizard
Réponse de Julien Groizard sur le sujet Recuperer informations dans un fichier .txt
Hello,

Oui ! En effet le "\" peut poser problème car il fait partie des caractères d'expression régulières (comme []().\^$|?*+{} ).

On peut éviter ça en indiquant que ton texte sera sans Regex (Expression Régulière).

[regex]::escape('ABC-ABCDE\')

Le script sera alors :

$data=@()
Get-Content .\data2.txt -Encoding UTF8 | % {
$data+=($_ -replace [regex]::Escape(" ABC-ABCDE\"),"")
}
Write-Output $data > .\data2_new.txt

Je te mets 2 sources qui m'ont aidé à résoudre ce problème :

learn.microsoft.com/en-us/powershell/mod...#escaping-characters

Pour comprendre le fonctionnement de Regex : fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re

Bonne journée à toi

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

Plus d'informations
il y a 2 ans 1 semaine #32693 par ClementG
Hello,

Je te remercie pour ta réponse ! C'est TOP !
J'avais vu cette option sur internet, mais même avec les docs je n'arrivais pas à l'exploiter...

C'est fonctionnel !

Pour le premier script ou j'avais du mal, je n'oublie pas ton code et je vais dejà comprendre à 100% la notion de tableau, liste etc :)

Mais en tout cas merci pour ton aide :)

Bonne journée à toi,

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

  • Julien Groizard
  • Visiteur
  • Visiteur
il y a 2 ans 1 semaine #32695 par Julien Groizard
Réponse de Julien Groizard sur le sujet Recuperer informations dans un fichier .txt
Avec plaisir :)

Tu peux en apprendre beaucoup sur la doc Microsoft :
learn.microsoft.com/fr-fr/powershell/scr...?view=powershell-7.2
learn.microsoft.com/fr-fr/powershell/scr...?view=powershell-7.2

Il faut, selon moi, au moins comprendre les @() et @{}

Ensuite tu pourras avoir plus de détails comme l'utilisation du [ordered]@{} pour l'organisation des lignes.

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

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