标题: [文本处理] 批处理如何实现将阿拉伯数字替换/转换成中文小写数字? [打印本页]
作者: jsw5438 时间: 2016-5-20 09:14 标题: 批处理如何实现将阿拉伯数字替换/转换成中文小写数字?
本帖最后由 pcl_test 于 2016-5-21 11:22 编辑
如题:
在一文本文件中,有带引号的"100”,"101”,"102"..........等字符串,文本中的字符串本来就带引号。
现在需要批量同时替换为"一百","一百零一","一百零二"......等字符串。 如何实现?
需要替换的字符串数大约为100个
请高手指点
作者: WHY 时间: 2016-5-20 22:25
本帖最后由 WHY 于 2016-5-25 16:14 编辑
改一下,支持最大有效数值位数为16,不支持小数- @if (0)==(0) echo off
- cscript //nologo //e:jscript "%~f0" < a.txt
- pause & goto :EOF
- @end
-
- var chs = '零一二三四五六七八九十百千万十百千亿十百千万十百千';
- var str = WSH.StdIn.ReadAll().replace(
- /"(?:0+)?(\d{1,16})"/g,
- function(s0, s1){
- var len = s1.length;
- s1 = s1.replace(/\d/g,
- function(s0){
- s0 = chs.substr(s0, 1) + (len > 1 ? chs.substr(len + 8, 1) : ''); len--;
- return s0;
- }
- )
- s1 = s1.replace(/零[千百十]/g, '零');
- s1 = s1.replace(/亿零+万/, '亿零').replace(/零+([亿万])/g, '$1');
- s1 = s1.replace(/零+/g, '零').replace(/(.)零$/, '$1');
- return '"' + s1 + '"';
- }
- )
-
- WSH.Echo(str)
复制代码
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>cd /d D:\Test
D:\Test>type a.txt
"100","9000901000008402"
"43210","1002506"
"00001", "0000"
"543210001"
D:\Test>test.bat
"一百","九千万九千零一十亿零八千四百零二"
"四万三千二百一十","一百万二千五百零六"
"一", "零"
"五亿四千三百二十一万零一"
请按任意键继续. . .
D:\Test>
作者: pcl_test 时间: 2016-5-20 22:32
本帖最后由 pcl_test 于 2016-5-21 11:34 编辑
- mshta "http://www.bathome.net/s/hta/?group=default&load=ch2num" "type('文本.txt').replace(/\d+/g, function($0){return num2chs($0)})"
复制代码
作者: pcl_test 时间: 2016-11-25 00:05
本帖最后由 pcl_test 于 2020-12-24 18:18 编辑
- @echo off
- rem 调用方法call :num2ch 阿拉伯数字 结果
- rem 最大支持999999999999
- call :num2ch 123454321 result
- echo;%result%
- pause&exit
- :num2ch
- set "num=%~1"
- set "num=%num: =%"
- for /f "tokens=* delims=0" %%a in ("%num%") do if "%%a" equ "" (set num=0) else set num=%%a
- set t=%num%cba987654321
- set /a len=0x%t:~12,1%
- set str=零一二三四五六七八九十百千万十百千亿十百千
- set /a len-=1
- setlocal enabledelayedexpansion
- for /l %%a in (0 1 %len%) do (
- for %%b in (!num:~%%a^,1!) do set s=!s!!str:~%%b,1!
- if !len! gtr 0 (
- set /a m=len+9
- for %%b in (!m!) do set s=!s!!str:~%%b,1!
- )
- set /a len-=1
- )
- for %%a in (千 百 十) do set s=!s:零%%a=零!
- set s=!s:亿零零零零万=亿零!
- for %%a in (亿 万) do (
- for %%b in (零零零 零零 零) do set s=!s:%%b%%a=%%a!
- )
- for %%a in (零零零零 零零零 零零) do set s=!s:%%a=零!
- if "!s:~1,1!" neq "" if "!s:~-1!" equ "零" set s=!s:~,-1!
- if "!s:~,2!" equ "一十" set s=!s:~1!
- endlocal&set "%~2=%s%"&goto :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |