Page 1 sur 1

Convertisseur de chaine contenant des caractères accentués

Posté : 07 oct. 2009 12:48
par Bigfish
Bonjour,

Voici un petit convertisseur de caractère sans prétention. Ce convertisseur n'a d'interet qu' intégré à un batch, autrement dit seul il ne servira pas à grand chose.

Ici l'idée est qu'à chaque fois que vous avez besoin d'utiliser une chaine contenant un ou plusieurs caractères accentués plutot que de faire la conversion vous même,
vous utilisiez ce convertisseur en l'appellant à l'aide la commande call.

Vous verrez que ce convertisseur prend tout son sens quand vous aurez à utiliser une chaine saisie par l'utilisateur.

:idea: un exemple d'utilisation ici: http://www.batcher.fr/forum/viewtopic.p ... 1250#p1250

Il s'utilise à l'aide d'un call depuis un autre batch. La chaine doit être passée en parametre lors du call.
La chaine convertie est en suite récupèrée à l'aide de la variable %newtring%. Exemple:

Call "d:\convertisseur.bat" "%MaChaine%"
Set MaChaine=%newtring%

:!: modif du 07-10-2009: petite modif car j'ai posé la mauvaise version :oops:

Asser de blabla voici le code:

Code : Tout sélectionner

@echo off
rem -------------------------------------------------------
rem Convertisseur de chaine contenant des caractères accentués
rem cree par Bigfish alias 3ddI7IHd
rem le 07-10-09
rem V1.1
rem -------------------------------------------------------

if "%~1"=="" set /p chaine=Veuillez saisir la chaine … convertir: 
if not "%~1"=="" set chaine=%~1
set Ctarget= é è ê ë à â ç ô ï î û ù ü
   set Cref= ‚ Š ˆ ‰ … ƒ ‡ “ ‹ Œ – — 

rem  Ú Þ Û Ù Ó Ô þ ¶ ´ ¯ ¹ ¨ ³

:suivant
set test=
rem cette ligne permet de de stoper la boucle une fois que tout les caracteres on été vérifiés
if "%chaine%"=="" goto afficher

set car=%chaine:~0,1%
set chaine=%chaine:~1%

rem la variable car contient-elle un espace ?
if "%car%"==" " set newstring=%newstring%%car%&goto suivant

rem ici on regarde si la variable car contient un caractere special de la liste Cref 
for /f %%i in ('echo %Cref% ^| findstr /i %car%') do set test=%%i
if "%test%"=="" set newstring=%newstring%%car%&goto suivant

rem si la variable car contient bien un caractere special on cherche le quel est-ce
set loop=1
:boucle
for /f "tokens=%loop% delims= " %%i in ('"echo %Cref%"') do set Cfound=%%i
if %Cfound%==%car% call :remplace %loop% & goto suivant
set /a loop=%loop%+1
if %loop% lss 14 goto boucle
set newstring=%newstring%%car%
goto suivant


:remplace
for /f "tokens=%1 delims= " %%d in ('"echo %Ctarget%"') do set newstring=%newstring%%%d
goto 3ddI7IHd

:afficher
Rem l'affichage ne se fera que si aucun parametre n'a été passé.
if "%~1"=="" (
echo %newstring%
pause > nul
exit
)

:3ddI7IHd
 
J'ai noté que sur certain PC une des lignes de code perd son dernier caractere donc la voici en dehor des balises code au cas ou !

set Cref= ‚ Š ˆ ‰ … ƒ ‡ “ ‹ Œ – — 

A+

Re: Convertisseur de chaine contenant des caractères accentués

Posté : 08 août 2010 12:41
par DarkBatcher
Bonjour,

Je pense que tu utilisé une solution trop complexe. Car il est possible de remplacer un caractère par un autre:

Code : Tout sélectionner

set str_chaine=%str_chaine:è=€%
::remplace è par €
::etc...