Convertir une chaîne en nombre
J'ai besoin d'aide concernant les points suivants;
J'ai le script suivant :
SETLOCAL DisableDelayedExpansion
for /f "delims=" %%a in (stores1.txt) do (
set /p stores=%%a )
stores.txt a le contenu comme:
0010
0011
0012
etc.
La solution que j'ai trouvé est set /p stores=%%a
Cette sortie : 0010,0011,0012
doit être passé en paramètre à une sql.script
:
sqlplus user/password@%database% @sqlscript.sql !stores! !data!
magasins doit être une valeur numérique, parce que dans le .sql script une valeur numérique est interrogé
De sorte que le concluzion est que j'ai besoin d'une valeur numérique et non une chaîne.Comment puis-je faire de cette "conversion" ?
@echo off
setlocal enabledelayedexpansion
set stores=
PAUSE
for /f "delims=" %%a in (stores1.txt) do (
set /a stores=%%a
echo !stores!
)
pause
OriginalL'auteur Iuliana | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, @Bali C est correct. La plupart du temps, toute valeur est une valeur de chaîne dans
cmd
à moins que le contexte soit implique ou suggère-il être traité différemment. Dans une expression arithmétique, par exemple, les valeurs seront automatiquement converties ou considérés comme des nombres.Toutefois, les numéros de lot dans les scripts peuvent être traités à plus d'un titre. En particulier, selon le caractère un nombre commence par, elle peut être traitée comme
une valeur hexadécimale (quand elle a le préfixe de
0x
);une valeur octale (lorsque commence avec un
0
);une valeur décimale (dans tous les autres cas).
Donc, si vous avez simplement utilisé, par exemple,
0010
dans un contexte où un certain nombre a été prévue, la valeur d'évaluer comme8
, parce que0010
est un nombre en octal notation àcmd
et8
est son équivalent décimal. C'est ce que vous pourriez obtenir, en particulier, si vous avez simplement fait:Vous pouvez utiliser les éléments suivants truc simple pour se débarrasser des principaux 0s (et éviter ainsi la valeur est traitée comme une octal):
Mettre le
1
au début transforme en un nombre à 5 chiffres, et une notation décimale du nombre. Trouver le reste de la division par 10000 vous donne dos, juste le nombre d'origine, mais maintenant avec le premier 0s dépouillé.(Remarque: l'opérateur modulo est
%
, pas%%
, mais le caractère a doublé en raison de sa signification spéciale à côté de l'arithmétique contexte.)OriginalL'auteur Andriy M
Je ne pense pas que cmd gère des nombres différemment à cordes, sauf si vous faites de l'arithmétique avec eux.
Je ne suis pas sûr si elle va faire toute la différence, mais vous pouvez affecter une variable d'un numéro à l'aide
set /a
, donc essayez d'utiliserVous avez besoin de mettre
setlocal enabledelayedexpansion
en haut de votre script.maintenant, le sql qu'il faut pour stocker des valeurs 8,9,10 inseatd de 10,11,12 d'où venait-elle prend des valeurs 8 et 9 ? il n'y a pas dans la stores.txt
Aucune idée, il faut le lire à partir du fichier. Essayez juste de
echo %%a
au lieu de cela et voir si vous obtenez un résultat différent.oui echo %%a est ok , mais echo !les magasins! montre les valeurs 8,9,10,10 . il ressemble set /a magasins=%%a, il donne ces valeurs pour les magasins de variable
OriginalL'auteur Bali C