Board logo

标题: [数值计算] 批处理 字符计算 最终版 [Raymai97作品] [打印本页]

作者: raymai97    时间: 2011-12-13 12:49     标题: 批处理 字符计算 最终版 [Raymai97作品]

昨天花了点时间整理下,做了个 批处理字符计算,里面附了关于这方面的知识,方便以后的新手查看使用

可以分析出多少个:
* 中文字
* 英文字
* 数字(全角+半角)
* 空格与符号(全角+半角)

代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title 批处理 字符计算 最终版 [Raymai97作品]
  4. color 0f
  5. mode con cols=80 lines=25
  6. :menu
  7. set sel=&cls
  8. echo,
  9. echo,    // 批处理 字符计算 最终版【支持英文、中文、数字、符号】 by Raymai97 //
  10. echo,
  11. echo,   请选择:
  12. echo,
  13. echo, 1 小麦(raymai97)在这方面研究所得的珍藏知识
  14. echo,
  15. echo, 2 使用 批处理字符计算器 【小麦原创】
  16. echo,
  17. echo, 3 批处理论坛 bbs.bathome.net
  18. echo,
  19. echo, Q 退出
  20. echo,
  21. set /p sel=^>
  22. if "!sel!"=="1" goto maidata
  23. if "!sel!"=="2" goto textcalc
  24. if "!sel!"=="3" start "" "http://bbs.bathome.net/"
  25. if "!sel!"=="Q" exit
  26. goto menu
  27. :maidata
  28. set sel=&cls
  29. echo,
  30. echo,  // 妙用if,区别并计算字符 //
  31. echo,
  32. echo,  set a=(某一个字符)
  33. echo,
  34. echo,  当 %%a%% lss "a" 就是 全角 或 半角 的 符号、空格 或 数字 else 就是 英文字
  35. echo,
  36. echo,  当 %%a%% gtr "Z" 就是 中文字
  37. echo,
  38. echo,  当 %%a%% lss "0" 就是 全角 或 半角 的 符号、空格 else 就是 全角 或 半角 的 数字
  39. echo,
  40. echo,  以上为批处理检测的思路,可能有点复杂,简单点的分析:
  41. echo,
  42. echo,  a-Z = 英文字                                        // 注意 //
  43. echo,
  44. echo,  多过 Z = 中文字                             / 批处理必须一个一个分析 /
  45. echo,
  46. echo,  0-9 = 全角 或 半角 的数字
  47. echo,
  48. echo,  少过 0 = 全角 或 半角 的符号、空格
  49. echo, --------------------------------------------------------------------------
  50. echo,  1 如果要区别 全角 和 半角 的符号、数字 和 空格            2 返回主菜单
  51. echo,
  52. set /p sel=^>
  53. if "!sel!"=="1" goto maidata2
  54. if "!sel!"=="2" goto menu
  55. goto maidata
  56. :maidata2
  57. set sel=&cls
  58. echo,
  59. echo,  // 如果要区别 全角 和 半角 的符号、数字 和 空格 //
  60. echo,
  61. echo,  请看看这段东西:
  62. echo,
  63. echo,  if "1" gtr "1" (echo yes) else (echo no)
  64. echo,  yes
  65. echo,  if "1" gtr "2" (echo yes) else (echo no)
  66. echo,  no
  67. echo,  if "," gtr "2" (echo yes) else (echo no)
  68. echo,  no
  69. echo,
  70. echo,  这段东西是我在cmd里测试得到的东西(已echo off),从上面可以看出:
  71. echo,
  72. echo,  全角的1大过 半角的 1  但 小过 半角的 2
  73. echo,
  74. echo,  全角的,大过 半角的 ,  但 小过 半角的 2
  75. echo,
  76. echo,  看到这里,不用我多说,你也大概能猜出要如何区别,并感到失望
  77. echo,
  78. echo, --------------------------------------------------------------------------
  79. echo,  1 返回主菜单
  80. echo,
  81. set /p sel=^>
  82. if "!sel!"=="1" goto menu
  83. goto maidata2
  84. :textcalc
  85. cls
  86. set text=
  87. set /a len=0,sym=0,en=0,ch=0,num=0
  88. echo,  // 批处理字符计算器 12月12日完成 by Raymai97 //
  89. echo,
  90. set /p text=请输入:
  91. echo,
  92. echo,  // 计算中 //
  93. if "!text!"=="" goto result
  94. :loop
  95. if "!text:~%len%!"=="" goto result
  96. if "!text:~%len%,1!" gtr "Z" (set /a ch+=1) else (
  97. if "!text:~%len%,1!" geq "a" (set /a en+=1) else (
  98. if "!text:~%len%,1!" lss "0" (set /a sym+=1) else (
  99. set /a num+=1)))
  100. set /a len+=1
  101. goto loop
  102. :result
  103. echo,
  104. echo,  // 结果 //
  105. echo,
  106. echo,  全角/半角英文字:!en!     中文字:!ch!
  107. echo,  
  108. echo,  全角/半角数字:  !num!     全角/半角符号或空格:!sym!
  109. echo,
  110. echo,  总计:!len!
  111. echo,
  112. echo,  // 任意键继续 //
  113. pause>nul
  114. goto textcalc
复制代码

作者: garyng    时间: 2011-12-14 11:22

// 计算中 //11:18:09.79

  // 结果 //11:18:36.50

  全角/半角英文字:214     中文字:90

  全角/半角数字:  108     全角/半角符号或空格:609

  总计:1021


你的弟弟来挺你啦~
不错嘛~

可是用折半法(虽然没计算 半角/全角 等字符)

11:21:20.29
1021
11:21:20.51

超快的啊!!
作者: raymai97    时间: 2011-12-14 11:40

回复 2# garyng


的确快,不过后来我还是觉得我的有优点,因为折半法的不是每个每个判断,算不到4种字符~
作者: CrLf    时间: 2011-12-14 15:26

回复 3# raymai97


    如果配合变量替换就可以,哈哈。
  1. ::计算字符串原始长度为 len1
  2. for /l (0 1 9) do set str=!str:%%a=!
  3. ::计算字符串排除数字后的长度为 len2
  4. set /a 数字=len1-len2
  5. for /l (a b c d e f g 等等...) do set str=!str:%%a=!
  6. ::计算字符串排除数字后的长度为 len3
  7. set /a 字母=len2-len3
  8. ::依此类推
复制代码

作者: wc726842270    时间: 2011-12-15 17:13

LZ还是把心思放在正经的学习上吧,你真的却认你一直在进步么?
作者: raymai97    时间: 2011-12-15 23:54

回复 5# wc726842270


好吧,我其实现在转学vb.net了,这个批处理做来是为了让方便以后查询~
现在批处理只是有空玩玩~ 基本很少玩了~




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2