Question Chaines alphanumériques (Résolu)

Plus d'informations
il y a 16 ans 5 mois #1206 par didine
JANEL , ARNAUD

Décidément mes nuit blanches ne sont pas terminées

Le script[code:1]get-content c:\test.txt -delimiter \"[END]\" |
select-string \"[GR][GRP]\"|select-string \"POLYLINE\" |
foreach {$_ -replace \"Type=.*\",\"Type=0x13 \"} |
set-content -encoding ASCII c:\rest.txt [/code:1]


accepte

Dans la recherche select-string \"[GR][GRP]\"

les chaines \"GRES\" ou \"LA GRANDE \"
or
il ne doit prendre que
des GR ou GRP avec ou sans chiffres
par exemple GR56 ou GR , GRP37

je deviens fou !!!

Passionnément difficile !
Pourtant je me suis équipé de PowerShellIDE
mais bon ...

comment dire au script
une chaine \"GRxxx\" où ce qui suit GR est OBLIGATOIREMENT un chiffre ou 2 ou 3

je joint le fichier test

MERCI

La pièce jointe test.txt est absente ou indisponible



Message édité par: newt, à: 20/10/07 04:50

Message édité par: newt, à: 20/10/07 04:52

Message édité par: newt, à: 20/10/07 04:54<br><br>Message édité par: Arnaud, à: 30/11/07 10:05

NEWTON_
Pièces jointes :

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

Plus d'informations
il y a 16 ans 5 mois #1207 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:CHAINES ALPHANUMERIQUES
Ah oui, attention: par défaut, select-string prend une expression régulière comme argument, pas un simple texte littéral.

Une expression régulière est une chaîne construite de manière à indiquer des critères qu'on va appliquer au texte fourni en paramètre. Ces critères vont permettre d'extraire des bouts du texte et de vérifier s'ils correspondent à ce qu'on cherche, ou éventuellement de remplacer ces bouts de texte par un autre texte. La différence avec un texte littéral c'est que ces critères vont bien au-delà de la simple correspondance de lettre à lettre. Il y a toute une syntaxe qu'il faut connaître pour ne pas faire d'erreur.

Dans ton cas, l'expression régulière \&quot;[GR][GRP]\&quot; ne fait pas du tout ce que tu imagines: quand tu mets des caractères entre crochets, PowerShell va considérer comme valable tout texte qui contient au moins un des caractères entre les crochets. En l'occurrence, tout texte qui contient un G ou un R, suivi d'un G, d'un R ou d'un P.

Le critère de recherche que tu veux (tout texte qui contient GR suivi de deux ou trois chiffres) pourra s'écrire ainsi:

select-string \&quot;GR\d{2,3}\&quot;

\d correspond à un chiffre (d pour digit en anglais).
{2,3} veut dire qu'on cherche de 2 à 3 occurrences du caractère précédent, \d en l'occurrence.

Si tu veux plus d'infos sur les expressions régulières (et tu en auras besoin souvent pour faire des manipulations avancées sur les chaînes dans PowerShell), tu peux consulter de nombreux sites - les expressions régulières existaient bien avant PowerShell, c'est un standard très répandu. Le site MSDN de Microsoft a une section qui lui est consacrée (en anglais malheureusement):

msdn2.microsoft.com/en-us/library/1400241x.aspx

Tiens-nous au courant,
Janel

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

Plus d'informations
il y a 16 ans 5 mois #1209 par didine
Réponse de didine sur le sujet Re:CHAINES ALPHANUMERIQUES
JANEL

Avec tes conseils je suis parvenu
à ce code:

[code:1]
get-content c:\mhd\test.txt -delimiter \&quot;[END]\&quot; |select-string \&quot;GR\d|GRP\&quot;
c:\mhd\GRrest.txt
[/code:1]

Sur 50 lignes
apparemment il bloque \&quot;GRAND\&quot;,\&quot;AGRES\&quot;,

Peux tu me traduire en mot
ce que tu lis dans ce code ?

Ainsi je verrais si cela correspond à mon but :S

Merci

RECTIF !!!
JE crois que le bon c'est

[code:1]select-string \&quot;GR\d|GRP|GR\s\&quot;[/code:1]

Seule une \&quot;traduction\&quot; peut m'aider beaucoup

Message édité par: newt, à: 20/10/07 14:05

Message édité par: newt, à: 20/10/07 14:07<br><br>Message édité par: newt, à: 20/10/07 14:08

NEWTON_

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

Plus d'informations
il y a 16 ans 5 mois #1210 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:CHAINES ALPHANUMERIQUES
Il me semble que ça veut dire :

GR suivi d’un chiffre
ou
GRP
ou
GR suivi de rien (c’est-à-dire d’un espace, d’une tabulation ou d’une fin de ligne)

Ca m'a l'air correct, non?

Janel

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

Plus d'informations
il y a 16 ans 5 mois #1211 par didine
Réponse de didine sur le sujet Re:CHAINES ALPHANUMERIQUES
Merci Janel

pour la traduction \&quot;litterale\&quot; c'est bien ce que je voulais
Et en cherchant dans la caverne \&quot;d'ali baba'' , ton blog

j'ai du mal avec set-content et foreach
le but est d'appliquer à tous les fichiers (*.txt) d'un répertoire
une procédure , un script en fait ,(qui génère un .txt pour chaque fichier source)
en faisant en sorte que les fichiers d'arrivé aient chacun leur nom ,.

C'est pas très clair :(
par exemple

t102.txt &gt; s102.txt
t204.txt &gt; s204.txt
t542.txt &gt; s542.txt

Perso j'ai réussi çà

[code:1]get-content c:\mhd\*.txt -delimiter \&quot;[END]\&quot; |select-string \&quot;GR\d|GRP|GR\s\&quot;|
set-content -encoding ASCII c:\mhd\TsGR.txt [/code:1]

mais pour la fin ils parviennent tous dans le même fichier ....pas bon

Merci

NEWTON_

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

Plus d'informations
il y a 16 ans 5 mois #1213 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:CHAINES ALPHANUMERIQUES
En fait, tu dois raisonner un peu différemment dès le début de la commande:

Commence par énumérer les fichiers dont tu as besoin, et ensuite pour chaque fichier tu vas appliquer tes opérations: recherche du texte qui va bien, remplacement d'une partie du texte, et sauvegarde dans un nouveau fichier.

Ca donne quelque chose comme ça (non testé, mais ça devrait le fait à peu de choses près):

[code:1]
dir c:\mhd\t*.txt | foreach {
get-content $_ -delimiter \&quot;[END]\&quot; |
select-string \&quot;GR\d|GRP|GR\s\&quot; |
set-content -encoding ASCII ($_.name -replace \&quot;t(.+)\.txt\&quot;,\&quot;s$+.txt\&quot;«»)
}[/code:1]

Ici, j'ai juste pris l'exemple où tu as des fichiers texte qui commencent par 't' et où tu veux les sauvegarder avec un nom qui commence par 's'. A adapter selon ton besoin réel.

Janel

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

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