[Powershell] Jouer avec un fichier texte

Le
PtitHomme
Bonsoir a tous
Bon je débute avec PowershellEt 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,
@++
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques Barathon [MS]
Le #696761
"PtitHomme" 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

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

Merci beaucoup !

"Jacques Barathon [MS]" message de news:
"PtitHomme" 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



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

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

Merci beaucoup !

"Jacques Barathon [MS]" message de news:
"PtitHomme" 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







Publicité
Poster une réponse
Anonyme