标题: [数值计算] [已解决]批处理如何判断一个字符串是纯数字类型 [打印本页]
作者: huaxn 时间: 2009-7-1 11:32 标题: [已解决]批处理如何判断一个字符串是纯数字类型
问题:一个未知长度的字符串,其内容也未知,可以是字母,数字,标点组成。
例如: set a=aaa1,23
set b=bbb123b
set c=123c
set d=123ddd。1230abbb456
set e=1230
如何判断它是纯数字组成的,比如e就是纯数字。
我尝试过如下方法
set /a x=%x% + 1 && set flg=n
试图通过数值运算是否成功来做标志,可惜行不通, 不是纯数字的也可以运算。我对/a数字计算的理解不深,求解诸位。
4楼同志的思路很牛,效率明显提高,该问题已经解决,谢谢各位
[ 本帖最后由 huaxn 于 2009-7-1 14:39 编辑 ]
作者: someone 时间: 2009-7-1 11:56
- echo "%e%"|findstr "^.[0-9][0-9]*.$">nul&&echo 纯数字||echo 不是纯数字
复制代码
作者: netbenton 时间: 2009-7-1 12:48
- @echo off&setlocal enabledelayedexpansion
- :loop
- set /p n=输入一个数字
- set m=!n!#
- for /l %%a in (0 1 9) do set m=!m:%%a=!
- if "!m!" equ "#" (echo 纯数字) else (echo 不是纯数字)
- goto :loop
复制代码
作者: inittab 时间: 2009-7-1 13:12
- @echo off
- set/p n=输入一个数字:
- for /f "delims=1234567890" %%a in ("%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
- pause
复制代码
作者: huaxn 时间: 2009-7-1 14:05
2楼同志:echo "%e%"|findstr "^.[0-9][0-9]*.$">nul&&echo 纯数字||echo 不是纯数字
这个方法我用过 效率极低,300条记录就已经慢成不可忍受
作者: rat 时间: 2009-7-1 17:20 标题: 回复 5楼 的帖子
findstr不是内部命令,所以慢
作者: ejzhang 时间: 2009-7-1 21:42
原帖由 inittab 于 2009-7-1 13:12 发表
@echo off
set/p n=输入一个数字:
for /f "delims=1234567890" %%a in ("%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
pause
上面代码如果n是空的时候也会判断为数字,照下面这样写就不会了(注意红色部分)
for /f "delims=1234567890" %%a in ("@%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
作者: inittab 时间: 2009-7-1 22:10
原帖由 ejzhang 于 2009-7-1 21:42 发表
上面代码如果n是空的时候也会判断为数字,照下面这样写就不会了(注意红色部分)
for /f "delims=1234567890" %%a in ("@%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
看了一下发现有问题。前后加@或其他字符都不好使。 象 [email=n=@123]n=@123[/email] 123@,加两个@就更不行了。象1243awfasf 都会判为纯数字,但如果什么也不加,则不会执行do 后边语句, 所以修正如下:
- @echo off
- set/p n=输入一个数字:
- if not "%n%"=="" (
- for /f "delims=1234567890" %%a in ("%n%") do echo 不是纯数字&pause&goto :eof
- ) else echo 为空
- echo 纯数字
- pause
复制代码
[ 本帖最后由 inittab 于 2009-7-1 22:33 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |