Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
extraction d'une chaine de caractere
Auteur Message
Répondre en citant
Message extraction d'une chaine de caractere 
Bonjour a tous,
Débutant en batch j'ai qq soucis avec le problème suivant
je souhaite extraire dans un fchier txt une donnée de longueur variable borné a sa gauche par une chaine de caractères
et a droite par le caractère §
ainsi dans cet exemple, le fichier toto.txt contient Se43éKJHfDDnameAZERTY§ghd7337FDS je souhaite extraire AZERTY
borne par name et § qui sont des variable saisies
j'ai essayé avec FOR mais c'est pas brillant
Merci



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message extraction d'une chaine de caractere 
Salut !!

AZERTY est variable en taille, mais ce qu'il y'a avant et après aussi ?
"name" est toujours là ??

Je cherche des éléments pour te faire la boucle ...




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message extraction d'une chaine de caractere 
Bosoir,
effectivement name et § (les délimiteurs de la variable à extraire) sont des exemples donc des variables de longueur aléatoire
les délimiteurs sont des variables à saisir en début de programmes .
Merci pour le coup de main.......pour ma part je me débats encore avec avec FOR



Répondre en citant
Message extraction d'une chaine de caractere 
RE,

Tu peux placer un caractère unique à la place de "name" ?
Pour la boucle on ne peut pas délimiter par une chaine ...

Sinon, si tu es patient, je peut te fair un batch qui remplace "name" par un caractère,
puis qui isole ta chaine pour l'extraire !!
Ensuite je remplace le caractère par "name" Laughing

Par contre il faut me dire ce que je peux utiliser, un caractère qui ne sera jamais présent dans ton fichier, par exemple # $ µ etc ...




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message extraction d'une chaine de caractere 
Finement raisonné, ta solution me convient parfaitement,
je continue a me débattre avec FOR
Merci pour le coup de main car j'ai beaucoup à apprendre



Répondre en citant
Message extraction d'une chaine de caractere 
Les caractères \,£,ù et § ne se trouvent pas dans le texte
Merci encore



Répondre en citant
Message extraction d'une chaine de caractere 
Bonjour,

j'ai codé une fonction "extract" qui devrait correspondre à tes attentes. Le code est un peut long mais sa fonctionne bien:

Code:

@echo off
setlocal enabledelayedexpansion
:: ici on défini la variable %chaine% qui contiendra la dernière ligne du fichier "test.txt"
for /f "tokens=*" %%i in ('type "test.txt"') do set chaine=%%i
:: ici on appelle la fonction extract qui retournera le résultat dans la variable %result%
call:extract "%chaine%" name §
echo resultat=%result%
pause
exit /b 0

:extract CHAINE DELIMITEUR_1 DELIMITEUR_2
call:def_num "%~1" "%~2" +
set num1=%i5%
call:def_num "%~1" "%~3"
set num2=%i5%&set tmp_var=%~1
set /a i1=%num1%-1&set /a i2=%num2%-%num1%+1
set result=!tmp_var:~%i1%,%i2%!
if "%code%"=="1" msg * "Erreur, un d‚limiteur n'a pas ‚t‚ trouv‚ dans la chaine"
goto:eof
:def_num
set i1=0&set tmp_var=%~2
:boucle1
if not "%tmp_var%"=="" set tmp_var=%tmp_var:~1%&set /a i1+=1&goto boucle1
set i2=0&set tmp_var=%~2&set tmp_ch=%~1
:boucle2
if "!tmp_ch:~0,1!"=="~0,1" set code=1&goto:eof
if not "!tmp_ch:~0,1!"=="!tmp_var:~%i3%,1!" set tmp_ch=!tmp_ch:~1!&set /a i2+=1&goto boucle2
set i4=0&set /a i6=%i1%-1
for /l %%i in (0,1,%i6%) do if not "!tmp_ch:~%%i,1!"=="!tmp_var:~%%i,1!" set i4=1
if "%i4%"=="1" set tmp_ch=!tmp_ch:~1!&set /a i2+=1&goto boucle2
set /a i2+=1
if "%~3"=="+" (set /a i5=%i2%+%i1%) else set /a i5=%i2%-1
goto:eof




Répondre en citant
Message extraction d'une chaine de caractere 
fantastique le resultat est ok merci beaucoup maintenant reste le plus dur
à moi de tout comprendre ce que tu as voulu faire et comment tu l'as fait
et la c'est pas gagné



Répondre en citant
Message extraction d'une chaine de caractere 
si tu veux des explications hésite pas Okay



Répondre en citant
Message extraction d'une chaine de caractere 
hello !

je voudrais savoir, c'est quoi la commande 'msg' ?
aussi, pour le retour des fonctions, merci d'utiliser les pointeurs
ça me parait pas du tout standart ça Mort de Rire

enfin tu pourait pas aerer ton code ? par exemple mettre les if sur plusieurs lignes, metre des espaces entre les fonctions par exemple Very Happy

[troll]ein ? quoi ? on vient de me dire dans l'oreillette qu'il n'y a pas de standard reconnu pour la programmation batch Mr. Green enfin bref ... c'est pas joli joli comme méthode quoi Razz[/troll]

@+



Dernière édition par Darkbatcher le Dim 4 Mar 2012 - 15:57; édité 3 fois

______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message extraction d'une chaine de caractere 
Wooo, quel beau code ^^
Tu fournis le manuel en 18 langues ?? Mr. Green

Un peu long, 2 boucles suffisent, mais si ça fonctionne je dis respect Okay




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message extraction d'une chaine de caractere 
!!!!

je sais que ma façon de coder en batch n'est pas du tout explicite, mais c'est comme sa ^^
quand je code en batch les seule chose qui m’intéresse c'est que sa soit fiable et le moins long possible; même si ici le dernier point peut surement être amélioré. Bref c'est un premier jet donc rien ne vous empêche de le modifier et de l'aérer pour que sa soit plus joli.

la commande msg permet simplement d'afficher une msgbox windows. Tu peut le remplacer par un echo si tu préfère. Et c'est vrai qu'il vaux mieux éviter cette commande sur un serveur TSE par exemple ^^

pour le fonctionnement, l'avantage de ce code est que les délimiteurs peuvent être composé de plusieurs caractères et le fichier d'origine n'est jamais modifié.

@ darkbatcher: qu'entend-tu par "utiliser les pointeurs" ?



Répondre en citant
Message extraction d'une chaine de caractere 
hello !

c'était juste un conseil ...
sinon pour les pointeurs, c'est un concept avancé de programmation que l'on retrouve dans des langages plus évolués que j'ai appliqué au batch.
tu peux aller voir le tuto à cette adresse : http://batch.xoo.it/t2176-tuto-Les-techniques-avancees.htm
et en prime, il y a les tableaux et pointeurs sur tableau ... je sais que je promet aussi une partie sur les piles et files, mais j'ai pas encore trouvé d'implémentation assez robuste...

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message extraction d'une chaine de caractere 
Excellent Okay

Si j'ai bien compris voici la fonction avec pointeur:
Code:

@echo off
setlocal enabledelayedexpansion
:: ici on défini la variable %chaine% qui contiendra la dernière ligne du fichier "test.txt"
for /f "tokens=*" %%i in ('type "fi.txt"') do set chaine=%%i
:: ici on appelle la fonction extract qui modifiera la variable indiqué (%chaine%)
call:extract chaine "s4fg " " mef"
echo resultat=%chaine%
pause
exit /b 0

:extract VARIABLE DELIMITEUR_1 DELIMITEUR_2
call:def_num "!%~1!" "%~2" +
set num1=%i5%
call:def_num "!%~1!" "%~3"
set num2=%i5%
set tmp_var=!%~1!
set /a i1=%num1%-1
set /a i2=%num2%-%num1%+1
set %~1=!tmp_var:~%i1%,%i2%!
if "%code%"=="1" msg * "Erreur, un d‚limiteur n'a pas ‚t‚ trouv‚ dans la chaine"
goto:eof

:def_num
set i1=0&set tmp_var=%~2
:boucle1
if not "%tmp_var%"=="" set tmp_var=%tmp_var:~1%&set /a i1+=1&goto boucle1
set i2=0&set tmp_var=%~2&set tmp_ch=%~1
:boucle2
if "!tmp_ch:~0,1!"=="~0,1" set code=1&goto:eof
if not "!tmp_ch:~0,1!"=="!tmp_var:~%i3%,1!" set tmp_ch=!tmp_ch:~1!&set /a i2+=1&goto boucle2
set i4=0&set /a i6=%i1%-1
for /l %%i in (0,1,%i6%) do if not "!tmp_ch:~%%i,1!"=="!tmp_var:~%%i,1!" set i4=1
if "%i4%"=="1" set tmp_ch=!tmp_ch:~1!&set /a i2+=1&goto boucle2
set /a i2+=1
if "%~3"=="+" (set /a i5=%i2%+%i1%) else set /a i5=%i2%-1
goto:eof




Répondre en citant
Message extraction d'une chaine de caractere 
hello !

Cmanix a écrit:
Excellent Okay

Si j'ai bien compris voici la fonction avec pointeur

exactement Razz
c'est énorme hein Mr. Green comme quoi les erreurs de débutants sont pas toujours des erreurs ^^
ça t'embête pas si je te piques ton code pour faire une bibliothèque ?

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Message extraction d'une chaine de caractere 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch