[Batch] [Résolu]Analyse d'une chaine de caractères + redimensionnement

Analyse d'une chaine de caractères + redimensionnement [Batch] [Résolu] - Shell/Batch - Programmation

Marsh Posté le 06-06-2007 à 20:25:56    

Bonjour à tous!!! Merci de m'accueillir sur votre forum
 
Comme beaucoup de personnes dans ce bas monde, je viens faire un petit appel à l'aide.... Voici mon problème :
 
En entrée -> des données de la forme suivante

Code :
  1. 00000012345.09000000
  2. 00000078.123698000000
  3. ...etc...


soit une liste de x nombres décimaux tous aléatoirement constitués avec quoi qu'il arrive 6 zéros au début et 6 zéros à la fin
 
Voici maintenant ce que j'essaie d'obtenir en sortie -> [6 caractères du coté gauche de la virgule].[6 caractères du coté droit de la virgule]
 
Il faut donc que je parvienne à supprimer les zeros en trop de chaque coté de la virgule pour ne garder que les données "utiles"
 
Cela fait un bout de temps que je suis dessus et je sais que je brûle... Voici ce que j'ai fait jusqu'à maintenant

Code :
  1. FOR /F "tokens=1,2 delims=." %%a IN ("%tx%" ) do (
  2. set gch=%%a
  3. set drt=%%b


Avec cela, je parviens (assez facilement vous me direz) à isoler chaque "membre" de mon nombre décimal
 
Pour la suite, je pense qu'il me faut tester la nature des données avec une commande du style (en pseudo-algo):

Code :
  1. Si "%gch%:~x,x"=="quelque chose" alors set gch=ce qu'il me faut garder avec :~x,x
  2. echo %gch%


Le tout en boucle... et faire pareil pour les membres droits de ma valeur...
 
Le problème c'est que je n'arrive pas à trouver le type de test à faire... Je débute et je n'ai pas encore assimilé toute la mesure de ce que langage BATCH peut faire dans ce domaine. La seule chose que je sais c'est que je dois le faire avec CE langage (qui, je sais n'est pas forcément le plus adapté à ce genre d'opérations)
 
Auriez-vous des conseils d'approche à me proposer?
 
Merci d'avance pour votre aide


Message édité par YokYok1 le 07-06-2007 à 12:00:47
Reply

Marsh Posté le 06-06-2007 à 20:25:56   

Reply

Marsh Posté le 07-06-2007 à 04:07:29    

Tu peux deja commencer par regarder l'aide de la commande set.
 
set /?
 
Pour le cote gauche, ce sera tres simple.
 
Par contre la partie de droite, si elle commence par des 0, faut etre prudent(e).

Reply

Marsh Posté le 07-06-2007 à 10:15:06    

Pour information, j'ai un complément à poster :
 
La chaine en question doit faire au maximum 13 caractères mais la virgule peut être positionnée à n'importe quel endroit.
 
Il faut daonc que je creuse un peut plus...
 
Si vous avez des remarques... Merci d'avance
 
Je vous tiens au courant

Reply

Marsh Posté le 07-06-2007 à 12:00:11    

Je crois que j'ai trouvé!!!
 
Grosso modo : Si à une position X il ya quelque chose et qu'après il n'y a rien -> la donnée fait X caractères et je peux rajouter un nb de zeros en conséquence.
 
C'est à optimiser mais bon...
 

Code :
  1. rem Formatage du taux
  2. rem taux = 1 caractère
  3. if not "%tx:~0,1%"=="" (
  4. if "%tx:~1,1%"=="" (
  5.  set tx=000000000000%tx%
  6. )
  7. )
  8. rem taux = 2 caractères
  9. if not "%tx:~0,2%"=="" (
  10. if "%tx:~2,1%"=="" (
  11.  set tx=0000000000%tx%
  12. )
  13. )
  14. rem taux = 3 caractères
  15. if not "%tx:~0,3%"=="" (
  16. if "%tx:~3,1%"=="" (
  17.  set tx=000000000%tx%
  18. )
  19. )
  20. rem taux = 4 caractères
  21. if not "%tx:~0,4%"=="" (
  22. if "%tx:~4,1%"=="" (
  23.  set tx=00000000%tx%
  24. )
  25. )
  26. rem taux = 5 caractères
  27. if not "%tx:~0,5%"=="" (
  28. if "%tx:~5,1%"=="" (
  29.  set tx=00000000%tx%
  30. )
  31. )
  32. rem taux = 6 caractères
  33. if not "%tx:~0,6%"=="" (
  34. if "%tx:~6,1%"=="" (
  35.  set tx=0000000%tx%
  36. )
  37. )
  38. rem taux = 7 caractères
  39. if not "%tx:~0,7%"=="" (
  40. if "%tx:~7,1%"=="" (
  41.  set tx=000000%tx%
  42. )
  43. )
  44. rem taux = 8 caractères
  45. if not "%tx:~0,8%"=="" (
  46. if "%tx:~8,1%"=="" (
  47.  set tx=00000%tx%
  48. )
  49. )
  50. rem taux = 9 caractères
  51. if not "%tx:~0,9%"=="" (
  52. if "%tx:~9,1%"=="" (
  53.  set tx=0000%tx%
  54. )
  55. )
  56. rem taux = 10 caractères
  57. if not "%tx:~0,10%"=="" (
  58. if "%tx:~10,1%"=="" (
  59.  set tx=000%tx%
  60. )
  61. )
  62. rem taux = 11 caractères
  63. if not "%tx:~0,11%"=="" (
  64. if "%tx:~11,1%"=="" (
  65.  set tx=00%tx%
  66. )
  67. )
  68. rem taux = 12 caractères
  69. if not "%tx:~0,12%"=="" (
  70. if "%tx:~12,1%"=="" (
  71.  set tx=0%tx%
  72. )
  73. )
  74. rem taux = 13 caractères -> Rien à faire


 
Merci à tous et à ce post : http://forum.hardware.fr/hfr/Progr [...] 0947_1.htm

Reply

Marsh Posté le 07-06-2007 à 12:02:43    

Salut, ce que tu veut faure c'est supprimer les 6 zéro ?
Si oui c'est comme ca:

Code :
  1. Set VrTest=00000012345.09000000
  2. Set VrTest=%VrTest:=000000%


Message édité par webding le 07-06-2007 à 12:02:54
Reply

Marsh Posté le 07-06-2007 à 14:37:42    

A essayer :

set tx=00000078.123698000000
FOR /F "tokens=1,2 delims=." %%a IN ("000000%tx%000000" ) do (
   set gch=%%a%
   set drt=%%b%
)
set gch=%gch:~-6%
set drt=%drt:~0,6%
 
echo %tx% = %gch% + %drt%


 
Jean-Pierre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed