Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Powershell] Jouer avec un fichier texte

3 réponses
Avatar
PtitHomme
Bonsoir a tous...
Bon je débute avec Powershell...Et j'ai qques soucis de méthode !

Je cherche a exploiter un fichier txt de plusieurs lignes....
Je cherche le signe "=" et a chaque fois que je le trouve, je remonte les 5
caratères situés a sa gauche...

ex:
J'aime Powershell= ilestsuper
News=testenligne

Le script me donnerai en réponse:
ilsup
teste

Merci pour votre aide,
@++

3 réponses

Avatar
Jacques Barathon [MS]
"PtitHomme" wrote in message
news:
Bonsoir a tous...
Bon je débute avec Powershell...Et j'ai qques soucis de méthode !

Je cherche a exploiter un fichier txt de plusieurs lignes....
Je cherche le signe "=" et a chaque fois que je le trouve, je remonte les
5 caratères situés a sa gauche...


Quelques postulats de départ:

- tu ne recherches que le premier signe "=" d'une ligne
- tu es sûr qu'il y a toujours au moins 5 caractères après le signe "="

Dans ce cas, ceci devrait marcher:

get-content file.txt | where {$_ -match "="} | foreach
{$_.SubString($_.IndexOf("=")+1, 5)}

Le risque, c'est que la méthode SubString() essaie de tronquer le texte à 5
caractères alors qu'il y en a moins: la ligne retournera alors une erreur.
Pour éviter ça (si c'est un risque dans le cas de ton fichier), tu peux
faire un calcul de la longueur du texte restant et s'il est inférieur à 5
utiliser cette valeur. Quelque chose comme:

... | foreach {
$debut = $_.IndexOf("=") + 1
if (($_.Length - $debut) -ge 5) { $taille = 5 }
else { $taille = $_.Length - $debut }
$_.SubString($debut, $taille)
}

Non testé, mais ça devrait le faire.

Il y a d'autres techniques possibles, par exemple en utilisant une
expression régulière (sujet récemment discuté sur le forum de
powershell-scripting.com, site que je te recommande au passage):

get-content file.txt | where {$_ -match "="} | foreach {$_ -replace
".+=((.){0,5}).*",'$1'}

Cette deuxième technique gère les cas où la chaîne qui suit le signe "="
fait moins de 5 caractères. C'est donc une solution plus compacte que la
première. Son inconvénient est qu'elle peut être moins facile à déchiffrer
(et donc éventuellement à débugger) si on n'est pas familier avec les
expressions régulières.

A toi de voir ce qui te convient le plus.

Jacques

Avatar
Polo
Rha...quand mêm..
Bon je vais digérer cela...et reviendrais quand cela ira mieux^^

Merci beaucoup !

"Jacques Barathon [MS]" a écrit dans le
message de news:
"PtitHomme" wrote in message
news:
Bonsoir a tous...
Bon je débute avec Powershell...Et j'ai qques soucis de méthode !

Je cherche a exploiter un fichier txt de plusieurs lignes....
Je cherche le signe "=" et a chaque fois que je le trouve, je remonte les
5 caratères situés a sa gauche...


Quelques postulats de départ:

- tu ne recherches que le premier signe "=" d'une ligne
- tu es sûr qu'il y a toujours au moins 5 caractères après le signe "="

Dans ce cas, ceci devrait marcher:

get-content file.txt | where {$_ -match "="} | foreach
{$_.SubString($_.IndexOf("=")+1, 5)}

Le risque, c'est que la méthode SubString() essaie de tronquer le texte à
5 caractères alors qu'il y en a moins: la ligne retournera alors une
erreur. Pour éviter ça (si c'est un risque dans le cas de ton fichier), tu
peux faire un calcul de la longueur du texte restant et s'il est inférieur
à 5 utiliser cette valeur. Quelque chose comme:

... | foreach {
$debut = $_.IndexOf("=") + 1
if (($_.Length - $debut) -ge 5) { $taille = 5 }
else { $taille = $_.Length - $debut }
$_.SubString($debut, $taille)
}

Non testé, mais ça devrait le faire.

Il y a d'autres techniques possibles, par exemple en utilisant une
expression régulière (sujet récemment discuté sur le forum de
powershell-scripting.com, site que je te recommande au passage):

get-content file.txt | where {$_ -match "="} | foreach {$_ -replace
".+=((.){0,5}).*",'$1'}

Cette deuxième technique gère les cas où la chaîne qui suit le signe "="
fait moins de 5 caractères. C'est donc une solution plus compacte que la
première. Son inconvénient est qu'elle peut être moins facile à déchiffrer
(et donc éventuellement à débugger) si on n'est pas familier avec les
expressions régulières.

A toi de voir ce qui te convient le plus.

Jacques



Avatar
Polo
oui... Polo est (un) PtitHomme.. Tout dépend de ou j'écris !

"Polo" a écrit dans le message de news:
OJiTl$
Rha...quand mêm..
Bon je vais digérer cela...et reviendrais quand cela ira mieux^^

Merci beaucoup !

"Jacques Barathon [MS]" a écrit dans le
message de news:
"PtitHomme" wrote in message
news:
Bonsoir a tous...
Bon je débute avec Powershell...Et j'ai qques soucis de méthode !

Je cherche a exploiter un fichier txt de plusieurs lignes....
Je cherche le signe "=" et a chaque fois que je le trouve, je remonte
les 5 caratères situés a sa gauche...


Quelques postulats de départ:

- tu ne recherches que le premier signe "=" d'une ligne
- tu es sûr qu'il y a toujours au moins 5 caractères après le signe "="

Dans ce cas, ceci devrait marcher:

get-content file.txt | where {$_ -match "="} | foreach
{$_.SubString($_.IndexOf("=")+1, 5)}

Le risque, c'est que la méthode SubString() essaie de tronquer le texte à
5 caractères alors qu'il y en a moins: la ligne retournera alors une
erreur. Pour éviter ça (si c'est un risque dans le cas de ton fichier),
tu peux faire un calcul de la longueur du texte restant et s'il est
inférieur à 5 utiliser cette valeur. Quelque chose comme:

... | foreach {
$debut = $_.IndexOf("=") + 1
if (($_.Length - $debut) -ge 5) { $taille = 5 }
else { $taille = $_.Length - $debut }
$_.SubString($debut, $taille)
}

Non testé, mais ça devrait le faire.

Il y a d'autres techniques possibles, par exemple en utilisant une
expression régulière (sujet récemment discuté sur le forum de
powershell-scripting.com, site que je te recommande au passage):

get-content file.txt | where {$_ -match "="} | foreach {$_ -replace
".+=((.){0,5}).*",'$1'}

Cette deuxième technique gère les cas où la chaîne qui suit le signe "="
fait moins de 5 caractères. C'est donc une solution plus compacte que la
première. Son inconvénient est qu'elle peut être moins facile à
déchiffrer (et donc éventuellement à débugger) si on n'est pas familier
avec les expressions régulières.

A toi de voir ce qui te convient le plus.

Jacques