[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
要是规则比较多的话可以试着建一个规则文件来读取,然后批处理里面来解释规则库,然后逐行测试……
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

1.txt
  1. 01 02 03 04 05
  2. 01 02 03 04 06
  3. 01 02 03 04 07
  4. 01 02 03 04 08
  5. 01 02 03 04 09
  6. 01 02 03 04 10
  7. 01 02 03 04 11
复制代码
rule.txt
  1. 5 b=a+1 c=b+1 d=c+1 e=d+1
  2. 5 b=a+1 c=b+1 d=c+1 e=d+2
复制代码
test.bat
  1. @if (0)==(0) echo off
  2. setlocal enabledelayedexpansion
  3. REM 读取文件内容
  4. for /f "tokens=*" %%i in ('type 1.txt') do (
  5. set "strLine=%%i"
  6. echo,Line data : !strLine!
  7. echo,
  8. set "bFit=1"
  9. call :_analysis
  10. if "!bFit!" EQU "0" (
  11. echo,不符算式规则...
  12. ) else (
  13. echo,符合算式规则...
  14. )
  15. pause
  16. )
  17. pause
  18. exit /b
  19. :_analysis
  20. (
  21. for /f "tokens=*" %%i in ('type rule.txt') do (
  22. echo,Rule data : %%i
  23. cscript -nologo -e:jscript %~s0 CheckAlgorithm "!strLine!" "%%i"
  24. for /f "tokens=*" %%a in ('cscript -nologo -e:jscript %~s0 CheckAlgorithm "!strLine!" "%%i"') do (
  25. REM echo,---analysis : %%a
  26. set "bFit=%%a"
  27. )
  28. REM echo,Analysis result : !bFit!
  29. REM 符合规则
  30. if "!bFit!" EQU "1" goto :EOF
  31. )
  32. goto :EOF
  33. )
  34. @end
  35. var func = WScript.Arguments(0);
  36. switch (func) {
  37. case "CheckAlgorithm":
  38. var strSrc = WScript.Arguments(1);
  39. var strAlg = WScript.Arguments(2);
  40. CheckAlgorithm(strSrc, strAlg);
  41. break;
  42. default:;
  43. }
  44. function GetColData(str, nCol) {
  45. //WScript.Echo("str is : " + str);
  46. //WScript.Echo("nCol : " + nCol);
  47. var nLen = str.split(" ").length;
  48. return nCol <= nLen ? 1 : 0;
  49. }
  50. function CheckAlgorithm(str1, str2) {
  51. /// 检测数据个数是否符合
  52. var strAlgs = str2.split(" ");
  53. WScript.Echo("strAlgs : " + strAlgs);
  54. var nCol = strAlgs[0];
  55. var nRet = GetColData(str1, nCol);
  56. if (!nRet) {
  57. WScript.Echo("0");
  58. return;
  59. }
  60. var nNums = str1.split(" ");
  61. WScript.Echo("nNums : " + nNums);
  62. /// 逐行对比算式是否符合
  63. for (var i=1; i<strAlgs.length; i++) {
  64. strAlgTmp = strAlgs[i];
  65. WScript.Echo("Check algorithm : " + strAlgTmp);
  66. var n1 = strAlgTmp.replace(/(\w)=.*/i, "$1");
  67. var n2 = strAlgTmp.replace(/.=(\w).*/i, "$1");
  68. var nP = strAlgTmp.replace(/.=.(.).*/i, "$1");
  69. var n3 = strAlgTmp.replace(/.=..(.*)/i, "$1");
  70. var strCodec = "";
  71. strCodec += parseInt(nNums[n1.toUpperCase().charCodeAt(0)-65]) + "==" + parseInt(nNums[n2.toUpperCase().charCodeAt(0)-65]) + nP + n3;
  72. WScript.Echo(strCodec);
  73. nRet = eval(strCodec);
  74. if (!nRet) {
  75. WScript.Echo("0");
  76. return;
  77. }
  78. }
  79. WScript.Echo(nRet ? 1 : 0);
  80. }
复制代码
初步实现简单自定义计算式规则效果。
Rule.txt内数据格式:
第一个数为匹配数据的个数,用来进行初筛不符合数据量的行;
第二个数据起为具体需要实现的算式,变量以a字母开始,匹配被筛数据的第一个值,b为第二个值,以此类推;
可简单识别+-*算式,/式需要额外写取整操作,目前只处理了b=a[+-*]n的情况;
更复杂的算式,需要对算式拆分重组验证作更细分的处理。
未优化代码。抛砖引玉。
1

评分人数

    • hongrk: 思路相当棒技术 + 1
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

返回列表