[BATCH] Génerer un fichier texte et écrire dedans [...]

Génerer un fichier texte et écrire dedans [...] [BATCH] - Shell/Batch - Programmation

Marsh Posté le 17-05-2014 à 21:51:45    

Bonsoir, je suis venu sur ce forum pour avoir de l'aide a propos d'un batch que j'essaye de finir.
J'en ai déjà créer, oui mais des beaucoup plus simple x)
 
Il servira a créer des binds dans le jeu css qui va tout gérer (Création du fichier config.cfg, écriture des lignes bind a partir du batch etc..).
 
Je vous poste le batch (Il n'est pas finit évidemment  :cry:)
 

Code :
  1. @echo off
  2. cls
  3. :Liste
  4. color 0B
  5. echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  6. echo ° Arme Principales °
  7. echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
  8. echo AWP = a
  9. echo M4A1 = b
  10. echo ak47 = c
  11. echo galil = d
  12. echo p90 = e
  13. echo scout = f
  14. echo xm1014 = g
  15. echo m3 = h
  16. echo sg552 = i
  17. echo aug = j
  18. echo mac10 = k
  19. echo ump45 = l
  20. echo tmp = m
  21. echo famas = n
  22. echo m249 = o
  23. echo sg550 = p
  24. echo g3sg1 = q
  25. echo mp5navy = r
  26. echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  27. echo ° Arme Secondaires °
  28. echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
  29. echo glock = s
  30. echo usp = t
  31. echo deagle = u
  32. echo elite = v
  33. echo five seven = w
  34. echo p228 = y
  35. echo ÉÍÍÍÍÍÍÍÍÍÍÍ»
  36. echo ° Munitions °
  37. echo ÈÍÍÍÍÍÍÍÍÍÍͼ
  38. echo Munitions Primaire = y
  39. echo Munitions Secondaire = z
  40. echo ÉÍÍÍÍÍÍÍÍÍÍÍÍ»
  41. echo ° Grenades.. °
  42. echo ÈÍÍÍÍÍÍÍÍÍÍÍͼ
  43. echo flashbang = fl
  44. echo hegrenade = he
  45. echo smokegrenade = sm
  46. echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  47. echo ° BIND F1,f2.. °
  48. echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
  49. echo [BIND] Touche f1 = f1
  50. echo [BIND] Touche f2 = f2
  51. echo [BIND] Touche f3 = f3
  52. echo [BIND] Touche f4 = f4
  53. echo [BIND] Touche f5 = f5
  54. echo [BIND] Touche f6 = f6
  55. echo [BIND] Touche f7 = f7
  56. echo [BIND] Touche f8 = f8
  57. echo [BIND] Touche f9 = f9
  58. echo [BIND] Touche f10 = f10
  59. echo [BIND] Touche f11 = f11
  60. echo [BIND] Touche f12 = f12
  61. echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  62. echo ° BIND NumPad °
  63. echo ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ
  64. echo [BIND] Touche NUMPAD 0 = n0
  65. echo [BIND] Touche NUMPAD 1 = n1
  66. echo [BIND] Touche NUMPAD 2 = n2
  67. echo [BIND] Touche NUMPAD 3 = n3
  68. echo [BIND] Touche NUMPAD 4 = n4
  69. echo [BIND] Touche NUMPAD 5 = n5
  70. echo [BIND] Touche NUMPAD 6 = n6
  71. echo [BIND] Touche NUMPAD 7 = n7
  72. echo [BIND] Touche NUMPAD 8 = n8
  73. echo [BIND] Touche NUMPAD 9 = n9
  74. echo .
  75. echo .
  76. echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
  77. :Question
  78. set /p choix= :Entrez la lettre de l'arme et la touche a bind.               Ex : gf4 "g + f4"
  79. if /I "%choix%"=="af1" (goto :af1)
  80. if /I "%choix%"=="af2" (goto :af2)
  81. if /I "%choix%"=="af3" (goto :af3)
  82. if /I "%choix%"=="af4" (goto :af4)
  83. if /I "%choix%"=="af5" (goto :af5)
  84. if /I "%choix%"=="af6" (goto :af6)
  85. :af1
  86. echo.
  87. echo bind "f1" "buy awp">>config.cfg
  88. echo Bind !
  89. echo Retour au debut !
  90. goto :Question
  91. :af2
  92. echo.
  93. echo bind "f2" "buy awp">>config.cfg
  94. echo Bind !
  95. echo Retour au debut !
  96. goto :Question
  97. :af3
  98. echo.
  99. echo bind "f3" "buy awp">>config.cfg
  100. echo Bind !
  101. echo Retour au debut !
  102. goto :Question
  103. :af4
  104. echo.
  105. echo bind "f4" "buy awp">>config.cfg
  106. echo Bind !
  107. echo Retour au debut !
  108. goto :Question
  109. :af5
  110. echo.
  111. echo bind "f5" "buy awp">>config.cfg
  112. echo Bind !
  113. echo Retour au debut !
  114. goto :Question
  115. :af6
  116. echo.
  117. echo bind "f6" "buy awp">>config.cfg
  118. echo Bind !
  119. echo Retour au debut !
  120. goto :Question


 
Comme vous avez pu le voir le batch écrira dans le fichier texte : bind "f." "buy awp"  
 
Sauf que mon premier problème est qu'il me faudra tout écrire (la j'ai déjà :af1 :af2 :af3 :af4 :af5 et :af6)
 
Donc mélanger les lettres de "a-z"
 
avec
 
les touches f1 f2 f3 f4 f5 f6 f7 f8 f9
et les touches du numpad (n1 n2 n3 n4 n5 n6 n7 n8 n9) qui sont enfaite  
kp_end kp_downarrow kp_pagedown kp_leftarrow kp_5 kp_rightarrow kp_home kp_uparrow kp_pageup
 
 
Y a t'il un moyen (programme,commande batch ou autre...) permettant de generer cela sans devoir tout écrire au clavier ?
 
ou alors un autre code (le batch nous demande quelle touche bind puis une autre question vient pour demander a quelle arme l'associer ?)
 
Je suis un peu perdu  :??:  
J'espere que vous me comprendrez  :whistle:  
 
Merci beaucoup de votre aide  :)


Message édité par pierrooo62 le 17-05-2014 à 22:45:04
Reply

Marsh Posté le 17-05-2014 à 21:51:45   

Reply

Marsh Posté le 18-05-2014 à 09:56:24    

:hello: !
 
Pour éviter de recopier tout le temps le même bout de code, tu peux essayer de factoriser cela en écrivant une fonction qui prend en paramètre la valeur que tu saisis [:cupra] :

Code :
  1. :Question
  2. set /p choix= :Entrez la lettre de l'arme et la touche a bind.               Ex : gf4 "g + f4"
  3. call :binding %choix%
  4. goto :Question
  5. :binding
  6. set var=%1
  7. echo Fonction binding est appelée avec argument %var% : arme %var:~0,1% et touche %var:~1%
  8. goto :eof


les variables %var:~0,1% et %var:~1% permettent d'extraire une chaîne de caractères à partir d'une autre : le premier caractère et le reste de la chaîne.
Après, à toi de réfléchir comment tu peux essayer d'associer la première lettre avec l'arme correspondante [:cupra]
 
:jap:


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 18-05-2014 à 10:53:52    

Bonjour !
 
Si j'avais la même chose à faire, pour éviter les saisies (et pour peu que vous soyez amené à faire régulièrement des configurations, sinon l'investissement ne vaudra pas le coup, même si cela peut être amusant à faire :) ), j'agirais ainsi :  
 
 * Création d'un fichier de configuration des actions, qui contiendrait les associations entre les "touches" et les actions :  

Code :
  1. a=buy awp
  2. b=buy m4a1
  3. ...


 
(Je ne garantis pas que les libellés des actions soient bons, par ailleurs, vous avez deux fois l'action "y", aux lignes 34 et 38).  
J'ai volontairement repris le "buy" à chaque ligne, car cela permet d'être plus ouvert, et de pouvoir gérer les éventuelles autres actions. Je vous conseille d'ailleurs d'être plus explicite dans le nommage de vos actions, et de faire plutôt quelque chose du genre :  
         

Code :
  1. awp=buy awp
  2. m4=buy m4a1
  3. ...


 
Ensuite, vous faites un ou plusieurs fichiers de paramétrage, qui correspondent chacun à un mapping. Ces fichiers sont de la forme  

Code :
  1. awp=f4
  2. sg550=n1
  3. flashbang=f2
  4. ....


 
L'avantage est que ces fichiers-là sont rapides à créer quand vous avez besoin de faire un nouveau paramétrage, pour vous ou quelqu'un d'autre.
 
Pour finaliser le tout, il ne vous reste plus qu'à faire un programme qui lit les deux fichiers (les fichiers ayant la même structure, le code de lecture est très proche), puis qui génère le fichier de sortie.
Pour être le plus ouvert possible, les trois noms de fichiers seront passés en paramètre.
 
Maintenant, quelle technologie utiliser pour ce programme, à vue de nez, c'est un poil trop complexe pour n'utiliser que du batch, je pense qu'il serait plus simple (et plus évolutif) de vous tourner vers un langage.
 
Le choix du langage est une affaire de goût, et de connaissances. Personnellement, je le ferais en C++, car c'est le langage que je connais le mieux, mais n'importe lequel devrait faire l'affaire, pour peu qu'il soit généraliste ou adapté à la lecture et au traitement de fichiers ligne par ligne. Un langage interprété peut être plus adapté pour mettre au point le programme.
 
Sinon, maintenant que j'y pense, je vous livre aussi la manière dont je ferais (au plus simple) le programme :  
 
* Fonction de lecture du fichier : Pour chaque ligne lue, "splitter" la ligne avec le signe égal comme séparateur, puis stockage des éléments dans une map, avec la partie avant le signe égal comme clé, le reste comme valeur.
* Fonction principale :  
     - lecture du fichier parametre1 et stockage dans map1
     - lecture du fichier parametre2 et stockage dans map2
     - Boucle sur tous les éléments de map2, pour récupérer une paire ( CLE, VALEUR) et écriture dans le fichier parametre3 de la ligne : bind "CLE" "map1[VALEUR]".
 
Bonne continuation !


Message édité par Farian le 18-05-2014 à 10:56:39
Reply

Sujets relatifs:

Leave a Replay

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