[Batch] Extraction chaîne de caractères [Résolu/Fermé]

Messages postés
85
Date d'inscription
vendredi 6 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2012
- - Dernière réponse : logon313
Messages postés
42
Date d'inscription
mercredi 25 décembre 2013
Statut
Membre
Dernière intervention
2 novembre 2016
- 13 juil. 2016 à 16:09
Salut,

j'ai un problème avec la manipulation d'une chaîne de caractères. J'ai un fichier (temp2.txt) qui contient une chaîne de caractètes comme tel :

1:4162

La chose que je veux faire c'est d'extraire le chiffre "4162" afin de la placer dans une variable temporairement. J'utilise la commande FOR afin de réaliser ceci.

Voici la ligne qui doit me permettre de faire cette extraction :

FOR /F "eol=: tokens=1 " %i in temp2.txt do @echo %i


Merci d'avance de votre aide
Afficher la suite 

15 réponses

Meilleure réponse
Messages postés
124
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
15 juin 2007
52
18
Merci
Désolé, j'ai été obligé de chercher un peu aussi. Il faut utiliser les variables avec deux fois le signe %.

-->

pause
@echo off
FOR /F "tokens=1,2 delims=:" %%i in (temp2.txt) do @echo %%i et %%j
pause

donne le résultat 1 et 4162

Dire « Merci » 18

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62814 internautes nous ont dit merci ce mois-ci

ga1841
Messages postés
6
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
3 mai 2007
7 -
J'ai remarqué que tu maitrisé bien la commande FOR et j'ai un pb avec une ligne de comande FOR. Cette ligne est correcte car lancé seul dans l'invite de commande j'obtien le résultat voulu mais intégré au reste de mon script elle ne passe plu du tout. si tu connai la raison et la solution merci de me le faire savoir. Merci d'avance
> ga1841
Messages postés
6
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
3 mai 2007
-
Bonjour,

Dans une boucle FOR quand tu lances directement la cmd, il y a 1 seul % devant ta varialbe, par exemple %i
Mais qd tu mets cette boucle dans un Batch, il faut y mettre 2 fois % donc %%i

Voilà tout.
8
Merci
Il existe une commande DOS pour extraire une chaine de caractère. On peut le voir en obtenant l'aide de la commande SET dans une invite de commande (tapez set /?). Extrait de l'aide :

La substitution de la variable d'environnement a été améliorée comme suit :

    %PATH:ch1=ch2%

développe la variable d'environnement PATH, remplaçant chaque
occurrence de "ch1" dans le résultat développé par "ch2".  "ch2" peut être
une chaîne vide pour supprimer toutes les occurrences de "ch1" de la sortie
développée. "ch1" peut commencer par un astérisque, auquel cas
la commande traitera la chaîne à partir du début et jusqu'à la première
occurrence du reste de ch1.

Vous pouvez aussi spécifier des sous-chaînes pour une expression.

    %PATH:~10,5%

développe la variable d'environnement PATH et utilise seulement 5
caractères à partir du onzième (décalage de 10)  dans le résultat sous forme
développée. Si la longueur n'est pas spécifiée, tout le reste de la valeur
de la variable est traité. Si l'une des valeurs (décalage ou longueur)
est négative, alors le nombre utilisé est la longueur de la valeur de la
variable d'environnement ajoutée au décalage ou à la longueur donné.

    %PATH:~-10%

extrait les 10 derniers caractères de la variable PATH.

    %PATH:~0,-2%

extrait tous les caractères sauf les deux derniers de la variable PATH.


Donc soit "machaine" la variable contenant "1:4162" :
set machaine=1:4162

pour obtenir 4162 dans la variable "resultat", il suffit d'écrire :
set /A resultat=%machaine:~2%


Voilou voilou
CedK
Bonjour,

j'ai fichier nommé Database.xml dont le contenu est le suivant :

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfParametre xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Parametre>
<Cle xsi:type="xsd:string">Provider</Cle>
<Valeur xsi:type="xsd:string">SQLServer</Valeur>
</Parametre>
<Parametre>
<Cle xsi:type="xsd:string">ConnectionString</Cle>
<!--Valeur xsi:type="xsd:string">Persist Security Info=False;User Id=fafa;Password={0};database=db1;server=titi</Valeur-->
<Valeur xsi:type="xsd:string">Persist Security Info=False;User Id=fifi;Password={0};database=db2;server=toto</Valeur>
</Parametre>
<Parametre>
<Cle xsi:type="xsd:string">DBDateFormat</Cle>
<Valeur xsi:type="xsd:string">yyyy-MM-dd HH:mm:ss</Valeur>
</Parametre>
</ArrayOfParametre>

je dois extraire les valeurs suivante : fifi db2 ainsi que toto


Merci beaucoup du coup de main !!!!
> Recrotzon -
BATCH :

FOR /F "tokens=2 delims=Id,database %%a (chemin du fichier) do (
ECHO %%a
ECHO %%b
)

Dans le corps de la boucle, tu fait ce que tu veux. Je n'ai pas tester, mais normalement çà devrait t'afficher :
fifi
db2
set chaine=bonjour
set result=%chaine:~0,1%
echo %result%

/A n'est pas obligatoire, et le resultat renvoie ce qui est attendue et pas un nombre negatif quand tu met une chaine de caractère. A tester
Messages postés
85
Date d'inscription
vendredi 6 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2012
2
3
Merci
le problème c'est que la ligne suivante "FOR /F "eol=: tokens=1 " %i in temp2.txt do @echo %i " ne fonctionne pas afin d'extraire le chiffre "4162" de la ligne "1:4162".

La commande dos FOR ne marche pas tel quel est présentée, j'aurai voulu un avis de quelqu'un qui connait bien cette commande afin d'arriver à mon objectif.

Merci
Messages postés
85
Date d'inscription
vendredi 6 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2012
2
0
Merci
Merci bien ca marche.

C'est cool. Tu est un pro !!

Salut et @+
0
Merci
si Chaine = abcdefg

substring(Chaine,3,2) = cd
substring(Chaine,2,4) = bcde
Messages postés
85
Date d'inscription
vendredi 6 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2012
2
-1
Merci
J'ai trouvé cette commande en cherchant sur INTERNET, j'ai essayé de l'adapter à mon script mais je ne comprends pas tout dans les paramètres de FOR.

Je n'arrive pas à saisir comment extraire le chiffre "4162" de ma ligne en utilisant la délimitation ":" avec FOR.

Est-ce-que tu peux m'aider à comprendre cette commande ?

Merci
Messages postés
85
Date d'inscription
vendredi 6 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2012
2
-1
Merci
J'ai essayé dans mon script avec ceci :

FOR /F "tokens=1,2 delims=:" %%i in (temp2.txt) do @echo %i %j
echo %j%


Je voudrais tester avec l'affichage mais cela ne marche pas. Peut-être que j'ai mal codé ma ligne avec echo.

Dans l'exécution du fichier batch je ne vois pas l'affichage de ma variable %j.

??
logon313
Messages postés
42
Date d'inscription
mercredi 25 décembre 2013
Statut
Membre
Dernière intervention
2 novembre 2016
9 -
[désolé de déterrer un sujet de plus de 10 ans... C'est parce que les variables dans la boucle for sont temporaires.
remplace ça :
FOR /F "tokens=1,2 delims=:" %%i in (temp2.txt) do @echo %i %j
echo %j%

par ça :
FOR /F "tokens=1,2 delims=:" %%i in (temp2.txt) do echo %i %j &set j=%j
echo %j%
-1
Merci
Bonjour je suis un debutant sur le script unix et je souhaiterais savoir comment se nomme et s'utilise la fonction qui permet d'extraire une sous chaine sous linux sachant que la chaine est dans une variable j'ai fais :

cat $fichier >>SUBSTR($fichier,1,10)||".fic"

mais ca ne marche pas !!
Help me !!!
Messages postés
124
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
15 juin 2007
52
-2
Merci
Et quel est le problème ?
Messages postés
124
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
15 juin 2007
52
-2
Merci
Je ne comprend pas pourquoi tu renseignes que le caractère de fin de ligne est ':' avec 'eol'.

Tu devrais renseigner le colon comme délimiteur. De plus, tu devras récupérer deux résultat -> 1 et 4162.
-2
Merci
bonjour
voici

@echo off
for /L %%A IN (1,1,50) do (PING -n 1 -w 5 192.168.1.%%A | find "TTL" | cscript //B convert.vbs)>> text.txt
for /f "tokens=1,2 delims=:" %%a in (text.txt) do (echo %%a >> text1.txt)
for /f "tokens=3" %%a in (text1.txt) do (echo %%a ) >> text2.txt
TYPE text2.txt
je voudrais exploiter les résultats enregistrés au fichier text2.txt "adresse ip",le probléme c'est ce que ces adresses sont terminés par un "ÿ" exemple 192.168.1.3ÿ et quand je fais par exemple un ping pour tester"for /f %%a in (text2.txt) do (ping %%a )",il ne donne rien " il ne connait pas le host"
for /f %%a in (text2.txt) do (ping %%a )
et quand j'affiche le contenu du fichier text2.txt,il me donne juste adresse ip

si possible avoir réponse

Merci d'avance de votre aide
-2
Merci
bonjour, je n'arrive pas a resoudre le probleme suivant:

Ecrire une procédure en PL/SQL qui fait passer un texte en paramètre ;
Et il doit détermine :
- Les doubles lettres (minuscules) apparues dans le texte (exemple : ss, mm, ll, etc.).
- Le nombre de phrases (séparée par un point).



pouvez vous m'aider s'il vous plait?? c'est urgent

Merci a+
Messages postés
14
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
21 décembre 2012
5
-2
Merci
Bonjour,

Je cherche à extraire d'un fichier txt un bou d'une ligne pour le remplacer dans mon script ensuite. C'est la ligne 5 qui vaut : "Home Directory"="C:\\Program Files\\Symantec AntiVirus\\" et je veux extraire "C:\\Program Files\\Symantec AntiVirus".

Je sais qu'on peut utiliser la commande FOR MS-DOS mais je ne connais pas les paramétrés à rentrer.

Cordialement

SEBJ
Messages postés
124
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
15 juin 2007
52
-3
Merci
La fonction FOR permet d'exécuter une boucle sur, par exemple, les enregistrements d'un fichier.
Le fichier à lire doit être renseigné après le 'IN'
Les paramètres dont tu as besoin sont tokens -> liste des zones à récupérer et delims -> délimiteur de tes zones.

Je pense que la structure la plus appropriée dans ton cas est la suivante :

FOR /F "tokens=1,2 delims=:" %%i in (temp2.txt) do ...

Suivant ton exemple, tu devrais avoir ensuite i -> 1 et j (la lettre suivante) = 4162

PS: sur certaine version de dos, il n'est pas possible d'exécuter d'appel à une procédure dans le do, il faut essayer si tu en a vraiment besoin.
Messages postés
15
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
4 février 2007
-3
Merci
Bonjour tous le monde, voila je suis debutant dans le pl|sql, j'ai un travail note a rendre la semaine prochaine .
le probleme est le suivant : utilise pl|sql et le c pour arrive a extraitre une chaine de caractere depuis un fichier.txt.
exemple lire un fichier html ou c note tous les auteurs avec leurs revus, ville, etc , il faut a ppelle une fonction c avec pl |sql pour lire ce fichier et remplire les table , auteur, revus, ville...
j'espere trouve une piste pour resourdre ca.
merci bien.
mansour79 :
voici une piste pour ton devoir ==> change de forum... ^^
tu pourras trouver des réponses sur les forums consacrés au PL/SQL je pense (ou au C)
bon courage