Board logo

标题: [原创] 做了个vbs编辑器 [打印本页]

作者: jyswjjgdwtdtj    时间: 2023-5-3 13:49     标题: 做了个vbs编辑器

本帖最后由 jyswjjgdwtdtj 于 2023-5-21 21:28 编辑

在后面 在后面
作者: yyz219    时间: 2023-5-3 14:29

谢谢分享哦
作者: jyswjjgdwtdtj    时间: 2023-5-3 14:29

回复 1# jyswjjgdwtdtj


    哦 对了 要整个jquery1.7
其实改改可以不用jq的
作者: LTSC1809    时间: 2023-5-3 14:33

为什么报错
作者: jyswjjgdwtdtj    时间: 2023-5-3 14:40

回复 4# LTSC1809


    因为你没下载jquery
你要去下载个1.x版本的jq
作者: LTSC1809    时间: 2023-5-3 14:46

回复 5# jyswjjgdwtdtj
哦,我下载的是3.3.1的
作者: LTSC1809    时间: 2023-5-3 14:47

回复 6# LTSC1809 还有,为什么我打开方式是计算机程序,用ie运行它只会问我要下载还是运行
作者: jyswjjgdwtdtj    时间: 2023-5-3 15:41

回复 7# LTSC1809


    因为它不是网页啊 他要运行在mshta.exe
作者: jyswjjgdwtdtj    时间: 2023-5-3 15:41

回复 6# LTSC1809


    新版本不支持ie7
作者: jyswjjgdwtdtj    时间: 2023-5-3 15:41

本帖最后由 jyswjjgdwtdtj 于 2023-5-3 16:17 编辑

我在改成不要jquery的

然后就不能用了………………
作者: LTSC1809    时间: 2023-5-4 19:05

我电脑上没有IE7,只有IE11,可以运行吗?毕竟现在windows10
作者: jyswjjgdwtdtj    时间: 2023-5-4 19:32

回复 11# LTSC1809


    但你电脑上总归有mshta.exe吧?这hta本来就不是在ie上运行的!
作者: LTSC1809    时间: 2023-5-4 22:41

回复 12# jyswjjgdwtdtj 我也觉得奇怪,既然又没用ie来运行,那高版本的jq支持库不支持ie7有什么关系,又用不到ie,管它支不支持呢
作者: jyswjjgdwtdtj    时间: 2023-5-5 20:11

回复 13# LTSC1809


    哇兄弟你要把我搞抓狂了!mshta.exe就是没有navigator等等对象的ie7!
作者: LTSC1809    时间: 2023-5-5 21:43

回复 14# jyswjjgdwtdtj


    抱歉,对这方面的了解甚少,之前一直以为windows上只有Windows Script Host和浏览器两种脚本解释器...
作者: jyswjjgdwtdtj    时间: 2023-5-5 22:45

回复 15# LTSC1809


    你直接双击就可以了
作者: jyswjjgdwtdtj    时间: 2023-5-15 22:33

本帖最后由 jyswjjgdwtdtj 于 2023-5-16 22:14 编辑

保存为hta!
  1. <!--without jquery-->
  2. <html>
  3.   <head>
  4.     <title></title>
  5.     <link rel="stylesheet" type="text/css" href="editor.css" >
  6.   </head>
  7.   <body>
  8.     <div class="editor_font" id="editor_main">
  9.       <div class="editor_font" id="editor_code">
  10.         <center class="editor_font editor_block" id="editor_list"style=""></center>
  11.         <div class="editor_font" id="editor_place">
  12.           <div class="editor_font editor_block" id="editor_text"></div>
  13.           <div class="editor_font" id="editor_activeline">
  14.             <span class="editor_font editor_block" id="editor_inputcursor"></span>
  15.             <div class="editor_font" id="editor_active"><div>
  16.           </div>
  17.         </div>
  18.       </div>
  19.     </div>
  20.     <div id=debug></div>
  21.     <script language=javascript src="fn.js"></script>
  22.     <script language=vbscript src="format.vbs"></script>
  23.     <script language="javascript">
  24. //new ActiveXObject("vbscript.regexp")
  25.     //def functions
  26.     //def variates
  27.     var main = byid("editor_main"),
  28.         code = byid("editor_code"),
  29.         list = byid("editor_list"),
  30.         place = byid("editor_place"),
  31.         text = byid("editor_text"),
  32.         activeline = byid("editor_activeline"),
  33.         active = byid("editor_active"),
  34.         cursor = byid("editor_inputcursor"),
  35.         fninfo = byid("fninfo"),
  36.         debug = byid("debug"),
  37.         body = document.body;
  38.     var left_c = 0,
  39.         top_l = 0,
  40.         len_c = 0,
  41.         tlen_l = 0;
  42.     var usingline;
  43.     //def element events
  44.     window.onload = function() {
  45.         var newline = ele("div");
  46.         newline.className = "editor_font editor_line";
  47.         text.appendChild(newline);
  48.         usingline = newline;
  49.         resetli();
  50.         main.focus();
  51.     }         
  52.     function addendcode(endcode){
  53.                     enter();
  54.                     write(endcode);
  55.                     for(var i=0,l=active.innerText.length;i<=l;i++){
  56.                         cursorbackward()
  57.                     }
  58.                     enter();
  59.                     write("    ");
  60.     }
  61.     main.onkeydown = function() {
  62.         var keycode = event.keyCode,
  63.             ctrl = event.ctrlKey,
  64.             shift = event.shiftKey,
  65.             alt = event.altKey;
  66.         switch (keycode) {
  67.             case 37: //left
  68.                 cursorbackward();
  69.                 break;
  70.             case 39: //right
  71.                 cursorforward();
  72.                 break;
  73.             case 38: //up
  74.                 if (top_l) {
  75.                     usingline.innerHTML = format.word(format.Space(active.innerText));
  76.                     top_l--;
  77.                     usingline = usingline.previousSibling;
  78.                     active.innerHTML = usingline.innerHTML;
  79.                     resettop();
  80.                     len_c = usingline.innerText.length;
  81.                     left_c = left_c > len_c ? len_c : left_c;
  82.                     resetleft();
  83.                     usingline.innerText = "";
  84.                 }
  85.                 break;
  86.             case 40: //down
  87.                 if (tlen_l - top_l) {
  88.                     usingline.innerHTML = format.word(format.Space(active.innerText));
  89.                     top_l++;
  90.                     usingline = usingline.nextSibling;
  91.                     active.innerHTML = usingline.innerHTML;
  92.                     resettop();
  93.                     len_c = usingline.innerText.length;
  94.                     left_c = left_c > len_c ? len_c : left_c;
  95.                     resetleft();
  96.                     usingline.innerText = "";
  97.                 }
  98.                 break;
  99.             case 13: //enter   
  100.                 t=active.innerText;
  101.                 var re=new ActiveXObject("vbscript.regexp")
  102.                 re.ignorecase=true
  103.                 re.pattern="^[ ]*If[ ]+.*?[ ]+Then[ ]*$"
  104.                 if(re.test(t)){
  105.                     addendcode("end if")
  106.                     return;
  107.                 }
  108.                 re.pattern="^[ ]*(for[ ]+.*?[ ]*=[ ]*.*?[ ]+to[ ]+.*?|for[ ]+each[ ]+.*?[ ]+in[ ]+.*?)$"
  109.                 if(re.test(t)){
  110.                     addendcode("next")
  111.                     return;
  112.                 }
  113.                 re.pattern="^[ ]*select[ ]+case[ ]+.*?$"
  114.                 if(re.test(t)){
  115.                     addendcode("end select")
  116.                     return;
  117.                 }
  118.                 re.pattern="^[ ]*(do|do[ ]+(until|while)[ ]+.*?)[ ]*$"
  119.                 if(re.test(t)){
  120.                     addendcode("loop")
  121.                     return;
  122.                 }
  123.                 re.pattern="^[ ]*while[ ]+.*?[ ]*$"
  124.                 if(re.test(t)){
  125.                     addendcode("wend")
  126.                     return;
  127.                 }
  128.                 re.pattern="^[ ]*with[ ]+.*?[ ]*$"
  129.                 if(re.test(t)){
  130.                     addendcode("end with")
  131.                     return;
  132.                 }
  133.                 re.pattern="^[ ]*((private|public)[ ]+)?function[ ]+\(.*?\)[ ]*$"
  134.                 if(re.test(t)){
  135.                     addendcode("end function")
  136.                     return;
  137.                 }
  138.                 re.pattern="^[ ]*((private|public)[ ]+)?sub[ ]+\(.*?\)[ ]*$"
  139.                 if(re.test(t)){
  140.                     addendcode("end sub")
  141.                     return;
  142.                 }
  143.                 re.pattern="^[ ]*class[ ]+\(.*?\)[ ]*$"
  144.                 if(re.test(t)){
  145.                     addendcode("end class")
  146.                     return;
  147.                 }/**/
  148.                 enter();
  149.                 break;
  150.             case 8: //backspace
  151.                 back(1)
  152.                 break;
  153.             case 46: //delete
  154.                 if (left_c < len_c) {
  155.                     cursorforward();
  156.                     back(1);
  157.                 } else if (left_c == len_c) {
  158.                     if (top_l == tlen_l) {
  159.                         break;
  160.                     }
  161.                     var next = usingline.nextSibling;
  162.                     tlen_l--;
  163.                     active.innerHTML = format.word(format.space(active.innerText + next.innerText));
  164.                     text.removeChild(next);
  165.                     len_c = active.innerText.length;
  166.                     resetli();
  167.                     resetleft();
  168.                 }
  169.                 break;
  170.             case 32: //space
  171.                 write(" ");
  172.                 break;
  173.             case 9: //tab
  174.                 if(shift){write("  ");return false;}
  175.                 write("    ");
  176.                 return false;
  177.                 break;
  178.             case 67://KEY-C
  179.                 if(ctrl){
  180.                     usingline.innerText=active.innerText
  181.                     window.clipboardData.setData("Text", text.innerText)
  182.                 }
  183.                 break;
  184.             case 112://F1
  185.                 alert(active.innerHTML);
  186.                 break;
  187.             case 113://F2
  188.                 alert(byid("editor_text").innerHTML)
  189.                 break;
  190.             case 114://F3
  191.                 alert(body.innerHTML)
  192.                 break;
  193.         }
  194.     }
  195.     main.onkeypress = function() {
  196.         var keycode = event.keyCode;
  197.         if (33 >= keycode || keycode == 127) {
  198.             return;
  199.         }
  200.         t=active.innerText
  201.         var ctrl = event.ctrlKey;
  202.         var shift = event.shiftKey;
  203.         var alt = event.altKey;
  204.         if(keycode==58){
  205.             var re=new ActiveXObject("vbscript.regexp")
  206.             re.pattern="[ ]*If[ ]+.*?[ ]+Then[ ]+.+$"
  207.             if(!re.test(t)){
  208.                 enter();
  209.                 return;
  210.             }
  211.         }
  212.         write(chr(keycode));
  213.     }
  214.     var select=false,
  215.         mouseon=false,
  216.         downleft=0,
  217.         upleft=0
  218.         downtop=0
  219.         uptop=0;
  220.     main.onmousedown=function(){
  221.         var l = Math.round((window.event.clientX - 10 - 50) / 12);
  222.         var t = Math.round((window.event.clientY - 30 + code.scrollTop) / 26); //为啥是30我也不知道
  223.         l=l<0?0:l;
  224.         t=t<0?0:t;
  225.         setTimeout(function(){
  226.             if(!mouseon){return;}
  227.             usingline.innerHTML = format.word(format.space(active.innerText));
  228.             lines=text.children;
  229.             top_l = t > tlen_l ? tlen_l : t;
  230.             len_c = lines[top_l].innerText.length;
  231.             left_c = len_c > l ? l : len_c;
  232.             usingline = lines[top_l];
  233.             active.innerHTML=format.word(format.space(usingline.innerText));
  234.             usingline.innerText = "";
  235.             resettop();
  236.             resetleft();
  237.         },0)
  238.        mouseon=true;
  239.     }
  240.     main.onmouseup=function(){
  241.         mouseon=false
  242.     }
  243.     document.onselectstart=function(){return false}
  244.     </script>
  245.   </body>
  246. </html>
复制代码

作者: jyswjjgdwtdtj    时间: 2023-5-15 22:38

保存为fn.js
  1.   var byclass = function(classname, root, type) {
  2.       var elements = [];
  3.       root = root == undefined ? document : root;
  4.       type = type == undefined ? "*" : type;
  5.       var all = root.getElementsByTagName(type)
  6.       for (var i = 0, l = all.length; i < l; i++) {
  7.           if (all[i].className == classname) {
  8.               elements.push(all[i])
  9.           }
  10.       }
  11.       return elements;
  12.   }
  13.   var byid = document.getElementById;
  14.   var ele = document.createElement;
  15.   var append = function(target, element) {
  16.       var parent = target.parentNode;
  17.       if (parent.lastChild == target) {
  18.           parent.appendChild(element);
  19.       } else {
  20.           parent.insertBefore(element, target.nextSibling);
  21.       }
  22.   }
  23.   //简化自制光标操作
  24.   function cursorforward() {
  25.       if (left_c == len_c) {
  26.           if (top_l == tlen_l) {
  27.               return;
  28.           }
  29.           usingline.innerHTML = format.word(format.Space(active.innerText));
  30.           top_l++;
  31.           usingline = usingline.nextSibling;
  32.           active.innerHTML = usingline.innerHTML;
  33.           resettop();
  34.           len_c = usingline.innerText.length;
  35.           left_c = 0;
  36.           resetleft();
  37.           usingline.innerText = "";
  38.       } else {
  39.           len_c = active.innerText.length;
  40.           if (left_c < len_c) {
  41.               left_c++;
  42.               resetleft();
  43.           }
  44.       }
  45.   }
  46.   function cursorbackward() {
  47.       if (left_c == 0) {
  48.           if (top_l == 0) {
  49.               return;
  50.           }
  51.           usingline.innerHTML = format.word(format.Space(active.innerText));
  52.           top_l--;
  53.           usingline = usingline.previousSibling;
  54.           active.innerHTML = usingline.innerHTML;
  55.           resettop();
  56.           left_c = len_c = usingline.innerText.length;
  57.           resetleft()
  58.           usingline.innerText = "";
  59.       } else {
  60.           len_c = active.innerText.length;
  61.           if (left_c > 0) {
  62.               left_c--;
  63.               resetleft();
  64.           }
  65.       }
  66.   }
  67.   //控制左侧行栏
  68.   function resetli() {
  69.       var t = ""
  70.       for (var i = 1; i <= tlen_l + 1; i++) {
  71.           t += i + "\n";
  72.       }
  73.       list.innerText = t;
  74.   }
  75.   //控制光标位置
  76.   function resetleft() {
  77.       cursor.style.left = left_c * 12 + "px";
  78.   }
  79.   function resettop() {
  80.       activeline.style.top = top_l * 26 + "px";
  81.   }
  82.   //写、擦
  83.   function back(num) {
  84. while(num--){
  85.                 if (left_c > 0) {
  86.       var t = active.innerText;
  87.       active.innerHTML = format.word(t.slice(0, left_c -1) + t.slice(left_c));
  88.           cursorbackward();
  89.                 } else if (left_c == 0) {
  90.                     if (top_l == 0) {
  91.                        return;
  92.                     }
  93.                     prev = usingline.previousSibling;
  94.                     left_c = prev.innerText.length;
  95.                     top_l--;
  96.                     tlen_l--;
  97.                     active.innerHTML = format.word(format.space(prev.innerText + active.innerText));
  98.                     prev.innerText = "";
  99.                     text.removeChild(usingline);
  100.                     resettop();
  101.                     len_c = active.innerText.length;
  102.                     usingline = prev;
  103.                     resetli();
  104.                     resetleft();
  105.                 }
  106. }
  107.   }
  108.   function write(str) {
  109.       t = active.innerText;
  110.       active.innerHTML = format.word(t.slice(0, left_c) + str + t.slice(left_c));
  111.       len_c++;
  112.       len = str.length
  113.       while (len--) {
  114.           cursorforward();
  115.       }
  116.   }
  117.   var chr = String.fromCharCode;
复制代码
保存为editor.css
  1. .editor_font {
  2. font-family:Consolas;
  3. font-size:22px;
  4. }
  5. .editor_block {
  6. position:absolute;
  7. }
  8. .space {
  9. display:inline;
  10. }
  11. #debug {
  12. position:absolute;
  13. bottom:50px;
  14. height:50px;
  15. width:100%;
  16. background:#999999;
  17. ddisplay:none;
  18. }
  19. .string {
  20. color:#A52A2A
  21. }
  22. .comment {
  23. color:#FFA500
  24. }
  25. .functions {
  26. color:#800080
  27. }
  28. .reservedwords {
  29. color:#008000
  30. }
  31. .variants {
  32. color:#0000FF
  33. }
  34. .operators{
  35.                   color:#FFA500
  36. }
  37. .specialwords {
  38. color:yellow;
  39. }
  40. .uselesswords {
  41. color:red;
  42. }
  43. .number {
  44. color:#B5CEA8
  45. }
  46. body {
  47. overflow:hidden;
  48. background:#F5F5F5
  49.                  color:black;
  50. }
  51. #editor_main {
  52. height:100%;
  53. width:100%;
  54. }
  55. #editor_code {
  56. height:100%;
  57. overflow-y:scroll;
  58. }
  59. #editor_list {
  60. left:0px;
  61. width:50px;
  62. height:100%;
  63. background:#D3D3D3
  64. color:#FFFFFF
  65. }
  66. #editor_place {
  67. position:relative;
  68. height:100%;
  69. width:100%;
  70. left:50px;
  71. }
  72. #editor_text {
  73. height:100%;
  74. width:100%;
  75. }
  76. .editor_line {
  77. color:black;
  78. }
  79. #editor_activeline {
  80. position:relative;
  81. }
  82. #editor_inputcursor {
  83. width:1px;
  84. background:black;
  85. }
  86. #editor_active {
  87. color:#ADD8E6
  88. height:25px;
  89. width:100%;
  90. }
复制代码

作者: jyswjjgdwtdtj    时间: 2023-5-15 22:38

本帖最后由 jyswjjgdwtdtj 于 2023-5-16 18:40 编辑

保存为format.vbs
  1. uselesswords="As Boolean Byte Currency Double Empty EndIf Enum Implements Integer Like Long LSet Optional "&_
  2.                    "ParamArray RaiseEvent RSet Shared Single Static Type TypeOf Variant"
  3.       specialwords="Debug Stop"
  4.       reservedwords="ByRef ByVal Call Case Class Const Dim Do Each Else ElseIf End Event Exit Explicit "&_
  5.                     "False For Function Get Goto If In Let Loop Me "&_
  6.                     "New Next Nothing Null On Option Preserve Private Property Public "&_
  7.                     "ReDim Rem Resume Select Set Sub Step Then To True "&_
  8.                     "Until WEnd While With"
  9.       functions="Abs Array Asc Atn CBool CByte CCur CDate CDbl CInt CLng CSng CStr Chr Cos CreateObject Date DateAdd DateDiff DatePart DateSerial DateValue Day Escape Eval Exp Filter Fix FormatCurrency FormatDateTime FormatNumber FormatPercent GetLocale GetObject GetRef Hex Hour InStr InStrRev InputBox Int IsArray IsDate IsEmpty IsNull IsNumeric IsObject Join LBound LCase LTrim Left Len LoadPicture Log Mid Minute Month MonthName MsgBox Now Oct Randomize RGB RTrim Replace Right Rnd Round ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion Second SetLocale Sgn Sin Space Split Sqr StrComp StrReverse String Tan Time TimeSerial TimeValue Timer Trim TypeName UBound UCase Unescape VarType Weekday WeekdayName Year"
  10.       constants="vbBlack vbRed vbGreen vbYellow vbBlue vbMagenta vbCyan vbWhite vbBinaryCompare vbTextCompare vbSunday vbMonday vbTuesday vbWednesday vbThursday vbFriday vbSaturday vbUseSystemDayOfWeek vbFirstJan1 vbFirstFourDays vbFirstFullWeek vbGeneralDate vbLongDate vbShortDate vbLongTime vbShortTime vbObjectError vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 vbApplicationModal vbSystemModal vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo vbCr vbCrLf vbFormFeed vbLf vbNewLine vbNullChar vbNullString vbTab vbVerticalTab vbUseDefault vbTrue vbFalse vbEmpty vbNull vbInteger vbLong vbSingle vbDouble vbCurrency vbDate vbString vbObject vbError vbBoolean vbVariant vbDataObject vbDecimal vbByte vbArray WScript Err"
  11.       replacedwords=reservedwords&" "&functions&" "&constants&" "&specialwords
  12.       operators="Mod Eqv And Not Or Xor Is Imp"
  13.       sym=split("+ / \ < > = <= >= <> ( ) * -"," ")
  14.       symto=split("@add@ @div@ @extdiv@ @lt@ @gt@ @eq@ @ngt@ @nlt@ @neq@ @lb@ @rb@ @mul@ @sbt@"," ")
  15.       Class formatcode
  16.         Private Sub Class_Initialize()
  17.         End Sub
  18.         Public Function word(code)
  19.           Dim strings,comments
  20.           With New RegExp
  21.             .global=True
  22.             .ignorecase=True
  23.             'space
  24.             .pattern="[ ]"
  25.             code=.replace(code,"&nbsp;")
  26.             'STRING
  27.             .pattern=""".*?"""
  28.             Set strings=.execute(code)
  29.             code=.Replace(code,"@0String0@")
  30.             'COMMENT
  31.             .pattern="('|rem\s).*"
  32.             Set comments=.execute(code)
  33.             code=.replace(code,"@comment@")
  34.             'RESERVEDWORD
  35.             for i=0 to ubound(sym)
  36.                code=replace(code,sym(i),symto(i))
  37.             next
  38.             For Each w In Split(uselesswords," ")
  39.               .pattern = "(\b)" & w & "(\b)"
  40.               code = .replace(code, "$1<span c_lass=uselesswords>" & w & "</span>$2")
  41.             Next
  42.             For Each w In Split(functions," ")
  43.               .pattern = "(\b)" & w & "(\b)"
  44.               code = .replace(code, "$1<span c_lass=functions>" & w & "</span>$2")
  45.             Next
  46.             For Each w In Split(constants," ")
  47.               .pattern = "(\b)" & w & "(\b)"
  48.               code = .replace(code, "$1<span c_lass=variants>" & w & "</span>$2")
  49.             Next
  50.             For Each w In Split(reservedwords," ")
  51.               .pattern = "(\b)" & w & "(\b)"
  52.               code = .replace(code, "$1<span c_lass=reservedwords>" & w & "</span>$2")
  53.             Next
  54.             For Each w In Split(specialwords," ")
  55.               .pattern = "(\b)" & w & "(\b)"
  56.               code = .replace(code, "$1<span c_lass=specialwords>" & w & "</span>$2")
  57.             Next
  58.             For Each w In Split(operators," ")
  59.               .pattern = "(\b)" & w & "(\b)"
  60.               code = .replace(code, "$1<span c_lass=operators>" & w & "</span>$2")
  61.             Next
  62.             For Each s In strings
  63.               code=Replace(code,"@0String0@","<span c_lass=string>"&s&"</span>",1,1)
  64.             Next
  65.             For Each c In comments
  66.               code=Replace(code,"@comment@","<span c_lass=comment>"&c&"</span>",1,1)
  67.             Next
  68.             for i=0 to ubound(sym)
  69.                code=replace(code,symto(i),"<span class=operators>"&sym(i)&"</span>")
  70.             next
  71.             code=Replace(code,"c_lass","class")
  72.             word=code
  73.           End with
  74.         End Function
  75.         Function Space(code)
  76.           variate="([a-zA-Z][a-zA-Z0-9_]*|\[[a-zA-Z0-9_]*\]|-?[0-9]+|"".*?"")"
  77.           lspace=replace(code,ltrim(code),"")
  78.           code=ltrim(code)
  79.           if rtrim(code)<>code then rspace=1
  80.           code=rtrim(code)
  81.           With New RegExp
  82.             .Global = True
  83.             .IgnoreCase = True
  84.             .pattern=""".*?"""
  85.             Set strings=.execute(code)
  86.             code=.Replace(code,"@String@")
  87.             .pattern="('|rem\s).*"
  88.             Set comments=.execute(code)
  89.             code=.replace(code,"@comment@")
  90.             .Pattern = "[ ]*(=|<|>|\+|&|\*|/|\^|\\)[  ]*"
  91.             code = .Replace(code, " $1 ")
  92.             .Pattern = "[ ]*<\s*>[ ]*"
  93.             code = .Replace(code, " <> ")
  94.             .Pattern = "[ ]*<\s*=[ ]*"
  95.             code = .Replace(code, " <= ")
  96.             .Pattern = "[ ]*>\s*=[ ]*"
  97.             code = .Replace(code, " >= ")
  98.             '.Pattern = "[ ]*_[ ]*$"
  99.             'code = .Replace(code, " _")
  100.             .Pattern = "Do[ ]+(While|Until)[ ]*"
  101.             code = .Replace(code, "Do $1")
  102.             .Pattern = "End[ ]+(Sub|Function|If|Select|With|Class)[ ]*"
  103.             code = .Replace(code, "End $1")
  104.             .Pattern = "Select[ ]+Case[ ]+"&variate
  105.             code = .Replace(code, "Select Case $1")
  106.             .Pattern = "If[ ]+(.*?)[ ]+Then[ ]+(.*)$"
  107.             code = .Replace(code, "If $1 Then $2")
  108.             .pattern="for[ ]+"&variate&"[ ]+=[ ]+"&variate&"[ ]+to[ ]+"&variate
  109.             code=.replace(code,"For $1 = $2 To $3")
  110.             .pattern="for[ ]+each[ ]+"&variate&"[ ]+in[ ]+"&variate
  111.             code=.replace(code,"For Each $1 In $2")
  112.             For Each s In strings
  113.               code=Replace(code,"@String@",s,1,1)
  114.             Next
  115.             For Each c In comments
  116.               code=Replace(code,"@comment@",c,1,1)
  117.             Next
  118.             code=lspace&code
  119.             if rspace=1 then code=code&" "
  120.           End With
  121.           Space=code
  122.         End function
  123.       End Class
  124.       Set format=New formatcode
  125. function getleftspace(str)
  126. getleftspace=replace(str,ltrim(str),"")
  127. end function
复制代码

作者: jyswjjgdwtdtj    时间: 2023-5-17 20:16

以前瞎胡写的 用着着了个高亮
Class math
  Public Function add(ByVal number1,ByVal number2)
    len1 = Len(number1):len2 = Len(number2)
    char1 = stringtochar(number1):char2 = stringtochar(number2)
    Dim result,remainder
    result = "":remainder = 0
    Do While(len1 &gt;= 1 Or len2 &gt;= 1)
      Dim n1,n2
      If (len1 &gt;= 1) Then
        n1 = char1(len1):len1 = len1-1
      Else
        n1 = 0
      End If
      If (len2 &gt;= 1) Then
        n2 = char2(len2):len2 = len2-1
      Else
        n2 = 0
      End If
      num = CDbl(n1) + CDbl(n2) + CDbl(remainder)
      remainder = (num-(num Mod 10)) / 10
      result = result &amp; (num Mod 10)
    Loop
    If remainder &gt; 0 Then result = result
    add = StrReverse(result)
  End Function

  Public Function substract(ByVal number1,ByVal number2)
    r_s = numbercompare(number1,number2)
    If r_s = 0 Then substract = 0
    If r_s = -1 Then change number1,number2
    len1 = Len(number1):len2 = Len(number2)
    char1 = stringtochar(number1):char2 = stringtochar(number2)
    Dim borrow,result
    Do While (len1 &gt;= 1 Or len2 &gt;= 1)
      If (len1 &gt;= 1) Then
        n1 = char1(len1):len1 = len1-1
      Else
        n1 = 0
      End If
      If (len2 &gt;= 1) Then
        n2 = char2(len2):len2 = len2-1
      Else
        n2 = 0
      End If
      num = CDbl(n1)-CDbl(n2) + CDbl(borrow)
      If num &lt; 0 Then
        borrow = (num-(num Mod 10)) / 10
        result = result &amp; (num + 10)
      Else
        borrow = 0
        result = result
      End If
    Loop
    For i = 2 To Len(result)
      If Right(result,1) = "0" Then
        result = Mid(result,1,Len(result)-1)
      Else
        Exit For
      End If
    Next
    result = StrReverse(result)
    If r_s = -1 Then result = "-"
    substract = result
  End Function
  Private Function stringTochar(ByVal str)
    Dim char():ReDim char(0):char(0) = Chr(0)
    For i = 1 To Len(str)
      ReDim Preserve char(UBound(char) + 1)
      char(UBound(char)) = Mid(str,i,1)
    Next
    stringtochar = char
  End Function
End Class
Set m = New math
MsgBox m.multiply("1111111","2222")
作者: jyswjjgdwtdtj    时间: 2023-5-21 21:18

本帖最后由 jyswjjgdwtdtj 于 2023-5-21 21:30 编辑

链接:https://pan.baidu.com/s/1bhe9Fc-p1refRaAR83kOnQ?pwd=1111
提取码:1111
添加了保存 另存为 新建 打开 按钮

如果exec碰上无线循环控制台输出会卡死 不论多慢输出一次 不知道该怎么解决
作者: segree    时间: 2023-8-12 15:28

原来最近你在忙着搞这个,链接呢?快放上来,按上面代码做不太好用啊,
作者: jyswjjgdwtdtj    时间: 2023-8-12 16:42

回复 22# segree


   诶呀 要体验去整个ace.js呀
作者: wwdzcdb    时间: 2023-11-6 17:15

回复 21# jyswjjgdwtdtj


    链接失效了    求补




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