Extraction fichier texte

Le
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.
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 #656307
"François" 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

Jacques Barathon [MS]
Le #656056
"Jacques Barathon [MS]" news:
"François" 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


François
Le #656054
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]" news:
"François" 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




Gilles LAURENT
Le #656053
"Jacques Barathon [MS]" 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
Jacques Barathon [MS]
Le #656052
"Gilles LAURENT" news:%
"Jacques Barathon [MS]" 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

Jacques Barathon [MS]
Le #656051
"François" 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

Gilles LAURENT
Le #656050
"Jacques Barathon [MS]" message de news:
| "Gilles LAURENT" | news:%
|| "Jacques Barathon [MS]" || 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
Jacques Barathon [MS]
Le #656049
"Gilles LAURENT" 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

François
Le #656047
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]" 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



Publicité
Poster une réponse
Anonyme