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

Extraction fichier texte

9 réponses
Avatar
François
Bonjour,

A partir de cet exemple :

Fichier.txt :

[01] Ceci est le (ident1)"resultat1" de la première ligne du fichier texte
[02] Ceci est le (ident2)"resultat2" de la deuxième ligne du fichier texte
XXX
XXX
[45] Ceci est le (ident3)"resultat3" de la nième ligne du fichier texte
XXX
XXX


Je souhaiterais récupérer le texte entre guillemets de la ligne ou se
trouve (ident3) cad resultat3 et l'appliquer à une variable DOS.

Pour effectuer la recherche ident3 ne change jamais de position et se
trouve avant le " mais ne situe pas toujours sur la même ligne du
fichier texte...

A dire simple, mais à faire c'est une autre histoire...
Merci.

9 réponses

Avatar
Jacques Barathon [MS]
"François" wrote in message
news:
Bonjour,

A partir de cet exemple :

Fichier.txt :

[01] Ceci est le (ident1)"resultat1" de la première ligne du fichier texte
[02] Ceci est le (ident2)"resultat2" de la deuxième ligne du fichier texte
XXX
XXX
[45] Ceci est le (ident3)"resultat3" de la nième ligne du fichier texte
XXX
XXX


Je souhaiterais récupérer le texte entre guillemets de la ligne ou se
trouve (ident3) cad resultat3 et l'appliquer à une variable DOS.

Pour effectuer la recherche ident3 ne change jamais de position et se
trouve avant le " mais ne situe pas toujours sur la même ligne du fichier
texte...


Version simple, si le fait de récupérer les guillemets avec la valeur ne te
dérange pas:

for /f "tokens=6 delims=) " %%r in ('findstr "(ident3)" fichier.txt') do set
resultat=%%r

J'ai écrit %%r en pensant que tu aurais besoin de cette ligne dans un batch.
Si tu veux tester en ligne de commande, contente-toi d'écrire %r.

Mes éminents confrères, bien plus érudits en langage batch, auront tôt fait
de préciser comment passer le guillemet comme délimiteur. Dans ce cas-là, il
faudra accéder au 2e token et le tour sera joué. :-)

Jacques

Avatar
Jacques Barathon [MS]
"Jacques Barathon [MS]" wrote in message
news:
"François" wrote in message
news:
Bonjour,

A partir de cet exemple :

Fichier.txt :

[01] Ceci est le (ident1)"resultat1" de la première ligne du fichier
texte
[02] Ceci est le (ident2)"resultat2" de la deuxième ligne du fichier
texte
XXX
XXX
[45] Ceci est le (ident3)"resultat3" de la nième ligne du fichier texte
XXX
XXX


Je souhaiterais récupérer le texte entre guillemets de la ligne ou se
trouve (ident3) cad resultat3 et l'appliquer à une variable DOS.



Evidemment, je ne résiste pas au plaisir de présenter deux versions
PowerShell:

$resultat = type fichier.txt | where {$_ -match "(ident3)"} | foreach
{$_.split('"')[1]}
$resultat = (select-string "(ident3)" fichier.txt -list).line.split('"')[1]

Jacques


Avatar
François
Merci Jacques pour ces deux réponses et cette rapidité ;-). Je suis en
train de tester la première....
Ce script sera à intégrer dans un script du dossier Netlogon pour
plusieurs dizaines d'utilisateurs et sera donc exécuté au moment du login.
Il me semble que même si je mets Powershell sur le serveur, les
utilisateurs au moment d'exécuter le script auront qq difficultés...
Donc à part le bon vieux Dos et wsh (et kixtart que j'utilise), point de
salut.
Mais je me trompe peut-être. Si tu as une soluce pour lancer un script
Powershell à partir d'une station de travail ne l'ayant pas.... Je suis
preneur! Sinon cela m'obligerait à le déployer sur l'ensemble des
stations de travail pour utiliser ton 2ème script.

François


"Jacques Barathon [MS]" wrote in message
news:
"François" wrote in message
news:
Bonjour,

A partir de cet exemple :

Fichier.txt :

[01] Ceci est le (ident1)"resultat1" de la première ligne du fichier
texte
[02] Ceci est le (ident2)"resultat2" de la deuxième ligne du fichier
texte
XXX
XXX
[45] Ceci est le (ident3)"resultat3" de la nième ligne du fichier texte
XXX
XXX


Je souhaiterais récupérer le texte entre guillemets de la ligne ou se
trouve (ident3) cad resultat3 et l'appliquer à une variable DOS.



Evidemment, je ne résiste pas au plaisir de présenter deux versions
PowerShell:

$resultat = type fichier.txt | where {$_ -match "(ident3)"} | foreach
{$_.split('"')[1]}
$resultat = (select-string "(ident3)" fichier.txt -list).line.split('"')[1]

Jacques




Avatar
Gilles LAURENT
"Jacques Barathon [MS]" a écrit dans le
message de news:
| Mes éminents confrères, bien plus érudits en langage batch, auront
| tôt fait de préciser comment passer le guillemet comme délimiteur.
| Dans ce cas-là, il faudra accéder au 2e token et le tour sera joué.
| :-)
|
| Jacques

:-)

Sans les guillemets (une seule ligne):
for /f "tokens=6 delims=) " %%r in ('findstr "(ident3)" fichier.txt') do
set resultat=%%~r

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jacques Barathon [MS]
"Gilles LAURENT" wrote in message
news:%
"Jacques Barathon [MS]" a écrit dans le
message de news:
| Mes éminents confrères, bien plus érudits en langage batch, auront
| tôt fait de préciser comment passer le guillemet comme délimiteur.
| Dans ce cas-là, il faudra accéder au 2e token et le tour sera joué.
| :-)
|
| Jacques

:-)

Sans les guillemets (une seule ligne):
for /f "tokens=6 delims=) " %%r in ('findstr "(ident3)" fichier.txt') do
set resultat=%%~r


Bien vu Gilles, j'avais également pensé à jouer d'une forme d'expansion mais
en cherchant sommairement je n'ai rien trouvé de convenable.

Concernant la tactique qui consisterait à utiliser les guillemets comme
délimiteurs, aurais-tu la solution? Je n'ai rien trouvé non plus à ce sujet,
à part une référence disant que tous les caractères sont acceptés. Mais si
j'écris "delims="" ou même "delims=^"" j'ai une erreur de syntaxe.

Jacques

Avatar
Jacques Barathon [MS]
"François" wrote in message
news:
Merci Jacques pour ces deux réponses et cette rapidité ;-). Je suis en
train de tester la première....
Ce script sera à intégrer dans un script du dossier Netlogon pour
plusieurs dizaines d'utilisateurs et sera donc exécuté au moment du login.
Il me semble que même si je mets Powershell sur le serveur, les
utilisateurs au moment d'exécuter le script auront qq difficultés...
Donc à part le bon vieux Dos et wsh (et kixtart que j'utilise), point de
salut.
Mais je me trompe peut-être. Si tu as une soluce pour lancer un script
Powershell à partir d'une station de travail ne l'ayant pas.... Je suis
preneur! Sinon cela m'obligerait à le déployer sur l'ensemble des stations
de travail pour utiliser ton 2ème script.


Tu ne te trompes pas. Il faut avoir installé PowerShell sur un poste pour
pouvoir l'utiliser. Donc, à moins que tu aies d'autres besoins d'exécution
de scripts sur les postes clients qui justifierait une installation
généralisée de PowerShell, les outils fournis en standard resteront tes
armes de choix. :-)

Jacques

Avatar
Gilles LAURENT
"Jacques Barathon [MS]" a écrit dans le
message de news:
| "Gilles LAURENT" wrote in message
| news:%
|| "Jacques Barathon [MS]" a écrit dans
|| le message de news:
||| Mes éminents confrères, bien plus érudits en langage batch, auront
||| tôt fait de préciser comment passer le guillemet comme délimiteur.
||| Dans ce cas-là, il faudra accéder au 2e token et le tour sera joué.
||| :-)
|||
||| Jacques
||
|| :-)
||
|| Sans les guillemets (une seule ligne):
|| for /f "tokens=6 delims=) " %%r in ('findstr "(ident3)"
|| fichier.txt') do set resultat=%%~r
|
| Bien vu Gilles, j'avais également pensé à jouer d'une forme
| d'expansion mais en cherchant sommairement je n'ai rien trouvé de
| convenable.
|
| Concernant la tactique qui consisterait à utiliser les guillemets
| comme délimiteurs, aurais-tu la solution? Je n'ai rien trouvé non
| plus à ce sujet, à part une référence disant que tous les caractères
| sont acceptés. Mais si j'écris "delims="" ou même "delims=^"" j'ai
| une erreur de syntaxe.
|
| Jacques

Le guillemet n'est pas supporté en tant que délimiteur car il entre en
conflit avec la syntaxe utilisée pour définir les options du for /f. Il
est donc nécessaire de décomposer pour pouvoir s'en sortir :

:: extraction de la ligne
for /f "tokens=*" %%r in ('findstr "t3)" fichier.txt') do set s=%%r
:: substitution des guillemets par des quotes (ou autre caractère)
set s=%s:"='%
:: split
for /f "tokens=2 delims='" %%r in ("%s%") do set resultat=%%r

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jacques Barathon [MS]
"Gilles LAURENT" wrote in message
news:
<...>
Le guillemet n'est pas supporté en tant que délimiteur car il entre en
conflit avec la syntaxe utilisée pour définir les options du for /f. Il
est donc nécessaire de décomposer pour pouvoir s'en sortir :

:: extraction de la ligne
for /f "tokens=*" %%r in ('findstr "t3)" fichier.txt') do set s=%%r
:: substitution des guillemets par des quotes (ou autre caractère)
set s=%s:"='%
:: split
for /f "tokens=2 delims='" %%r in ("%s%") do set resultat=%%r


En effet, j'avais pensé à la technique de remplacer le guillemet dans le
texte pour pouvoir appliquer la décomposition sur un autre délimiteur, mais
j'avais un doute sur la possibilité de quand même utiliser le guillemet
comme délimiteur. Tant pis.

Jacques

Avatar
François
J'ai donc utilisé la soluce de Jacques et le complément de Gilles. Cela
me convient parfaitement...
Concernant les guillements, j'ai utilisé un vbs avec la fonction Mid et
len pour découper... Mais je vais tester la solution proposée en soirée
qui m'éviterait 2 types de scripts...
A+ !

François

"Jacques Barathon [MS]" a écrit dans le
message de news:
| Mes éminents confrères, bien plus érudits en langage batch, auront
| tôt fait de préciser comment passer le guillemet comme délimiteur.
| Dans ce cas-là, il faudra accéder au 2e token et le tour sera joué.
| :-)
|
| Jacques

:-)

Sans les guillemets (une seule ligne):
for /f "tokens=6 delims=) " %%r in ('findstr "(ident3)" fichier.txt') do
set resultat=%%~r