[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何实现将阿拉伯数字替换/转换成中文小写数字?

本帖最后由 pcl_test 于 2016-5-21 11:22 编辑

如题:

在一文本文件中,有带引号的"100”,"101”,"102"..........等字符串,文本中的字符串本来就带引号。

现在需要批量同时替换为"一百","一百零一","一百零二"......等字符串。 如何实现?
需要替换的字符串数大约为100个

请高手指点
1

评分人数

本帖最后由 pcl_test 于 2020-12-24 18:18 编辑
  1. @echo off
  2. rem 调用方法call :num2ch 阿拉伯数字 结果
  3. rem 最大支持999999999999
  4. call :num2ch 123454321 result
  5. echo;%result%
  6. pause&exit
  7. :num2ch
  8. set "num=%~1"
  9. set "num=%num: =%"
  10. for /f "tokens=* delims=0" %%a in ("%num%") do if "%%a" equ "" (set num=0) else set num=%%a
  11. set t=%num%cba987654321
  12. set /a len=0x%t:~12,1%
  13. set str=零一二三四五六七八九十百千万十百千亿十百千
  14. set /a len-=1
  15. setlocal enabledelayedexpansion
  16. for /l %%a in (0 1 %len%) do (
  17.     for %%b in (!num:~%%a^,1!) do set s=!s!!str:~%%b,1!
  18.     if !len! gtr 0 (
  19.         set /a m=len+9
  20.         for %%b in (!m!) do set s=!s!!str:~%%b,1!
  21.     )
  22.     set /a len-=1
  23. )
  24. for %%a in (千 百 十) do set s=!s:零%%a=零!
  25. set s=!s:亿零零零零万=亿零!
  26. for %%a in (亿 万) do (
  27.     for %%b in (零零零 零零 零) do set s=!s:%%b%%a=%%a!
  28. )
  29. for %%a in (零零零零 零零零 零零) do set s=!s:%%a=零!
  30. if "!s:~1,1!" neq "" if "!s:~-1!" equ "零" set s=!s:~,-1!
  31. if "!s:~,2!" equ "一十" set s=!s:~1!
  32. endlocal&set "%~2=%s%"&goto :eof
复制代码

TOP

本帖最后由 pcl_test 于 2016-5-21 11:34 编辑
  1. mshta "http://www.bathome.net/s/hta/?group=default&load=ch2num" "type('文本.txt').replace(/\d+/g, function($0){return num2chs($0)})"
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2016-5-25 16:14 编辑

改一下,支持最大有效数值位数为16,不支持小数
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt
  3. pause & goto :EOF
  4. @end
  5. var chs = '零一二三四五六七八九十百千万十百千亿十百千万十百千';
  6. var str = WSH.StdIn.ReadAll().replace(
  7.     /"(?:0+)?(\d{1,16})"/g,
  8.     function(s0, s1){
  9.         var len = s1.length;
  10.         s1 = s1.replace(/\d/g,
  11.             function(s0){
  12.                 s0 = chs.substr(s0, 1) + (len > 1 ? chs.substr(len + 8, 1) : ''); len--;
  13.                 return s0;
  14.             }
  15.         )
  16.         s1 = s1.replace(/零[千百十]/g, '零');
  17.         s1 = s1.replace(/亿零+万/, '亿零').replace(/零+([亿万])/g, '$1');
  18.         s1 = s1.replace(/零+/g, '零').replace(/(.)零$/, '$1');
  19.         return '"' + s1 + '"';
  20.     }
  21. )
  22. 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>

TOP

返回列表