初看觉得不难,在实际编写中遇到了不少问题,也反复编写了几次。
因cmd最大能处理的数值是亿位,所以代码只考虑到亿位数值:- @echo off&setlocal enabledelayedexpansion
- for %%a in (一 二 三 四 五 六 七 八 九) do set /a n+=1&set "_%%a=!n!"
- for %%a in (十-0 百-00 千-000 亿-00000000) do (
- for /f "tokens=1,2 delims=-" %%a in ("%%a") do set "_%%a=%%b"
- )
- for /f "delims=" %%a in (a.txt) do (
- set /a num=0&set "str=%%a"
- set "str=!str:零=!"
- for %%a in (亿 万 千 百 十) do if "!str:%%a=!" neq "!str!" call :lp %%a
- set /a num+=_!str!&echo !num!
- )
- pause>nul&goto :eof
- :lp
- if %1 neq 万 (
- for /f "tokens=1* delims=%1" %%a in ("%str%") do set /a num+=!_%%a!!_%1!&set "str=%%b"
- ) else (
- for /f "tokens=1,2 delims=万" %%a in ("!str!") do set "var=%%a"&set "str=%%b"
- for %%a in (千 百 十) do if "!var:%%a=!" neq "!var!" call :loop %%a
- set /a num+=_!var!*10000
- )
- goto :eof
- :loop
- for /f "tokens=1* delims=%1" %%a in ("%var%") do set /a num+=!_%%a!!_%1!0000&set "var=%%b"
复制代码 测试文本a.txt如下:- 一千零二十二万零四十九
- 二亿二千二百二十二万二千二百二十四
- 一
- 四十三
- 五百零九
- 二百七十一
- 一千零二
- 五千零八十六
- 二千九百零三
- 三千四百五十五
- 九十九
- 三百零九万零七十
- 九亿零三
复制代码
[ 本帖最后由 batman 于 2009-11-11 00:01 编辑 ] |