Board logo

标题: 20元求脚本替换文本内容,问题描述如下: [打印本页]

作者: 1432689025    时间: 2019-7-17 17:05     标题: 20元求脚本替换文本内容,问题描述如下:

问题描述:
当前路径下存在Test文件夹,Test下面有两个文本文件,需要包含 .method XXX 开始的字符串到下一个
.end method的内容全部用src里面的内容替换掉,包换 .method XXX 和.end method所在的行。
层级:
Test\dst
Test\src
文件内容:
dst的内容如下:
  1. # virtual methods
  2. .method protected canAcceleration()Z
  3.     .locals 5
  4.     .prologue
  5.     .line 914
  6.     const/4 v0, 0x0
  7.     return v0
  8. .end method
  9. .method protected getIsVip()V
  10.     .locals 3
  11.     .prologue
  12.     const/4 v0, 0x0
  13.     return v0
  14. .end method
复制代码
src的内容如下:
  1. .method protected getIsVip()V
  2.     .locals 3
  3.     .prologue
  4.     const/4 v0, 0x1
  5.     return v0
  6. .end method
复制代码
需要把dst里面的方法换成:
  1. .method protected getIsVip()V
  2.     .locals 3
  3.     .prologue
  4.     const/4 v0, 0x0
  5.     return v0
  6. .end method
复制代码
这个字段区间里面的内容全部换成 src 里面的文本内容 :
  1. .method protected getIsVip()V
  2.     .locals 3
  3.     .prologue
  4.     const/4 v0, 0x1
  5.     return v0
  6. .end method
复制代码

作者: zaqmlp    时间: 2019-7-17 17:15

费用、联系方式呢
作者: 1432689025    时间: 2019-7-17 17:19

我的思路是:
(1)先找到 Test 文件中的 dst 文件 ,然后读取.method protected getIsVip()V的所在行,记录下此时的行号 %StartLineNumber%,然后继续查找与.method protected getIsVip()V相匹配的.end method,同样记录此时的.end method所在的行号%EndLineNumber%。
(2) 此时读取src文件内的所有文本内容,直接替换掉%StartLineNumber%所在行和%EndLineNumber%所在行的内容即可。
PS:每个人的码风不太一样,能实现就好,互相交流学习,请大家多多指教。
作者: 1432689025    时间: 2019-7-17 17:29

回复 2# zaqmlp
Twenty Yuan. E-mail :1432689025@qq.com
作者: flashercs    时间: 2019-7-17 18:36

本帖最后由 flashercs 于 2019-7-17 18:51 编辑

保存为test.bat ,放在Test文件夹所在目录下,双击运行即可。
  1. 0<1/*,:
  2. @echo off
  3. cscript -nologo -e:jscript %0
  4. pause
  5. exit /b
  6. */
  7. ;
  8. var fso = new ActiveXObject('Scripting.FileSystemObject');
  9. var wshell = new ActiveXObject('WScript.Shell');
  10. wshell.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  11. var srcfile = 'Test\\src';
  12. var dstfile = 'Test\\dst';
  13. var tsread = fso.openTextFile(srcfile, 1, false, -2);
  14. while (!tsread.AtEndOfStream) {
  15.   var strsrc = tsread.ReadAll();
  16. }
  17. tsread.close();
  18. var re = /(\.method\s+.+)[\s\S]*?\.end\s+method/g;
  19. var arrsrc, objsrc = {};
  20. while (arrsrc = re.exec(strsrc)) {
  21.   objsrc[arrsrc[1]] = arrsrc[0];
  22. }
  23. tsread = fso.openTextFile(dstfile, 1, false, -2);
  24. while (!tsread.AtEndOfStream) {
  25.   var strdst = tsread.ReadAll();
  26. }
  27. tsread.close();
  28. var tswrite = fso.openTextFile(dstfile, 2, false, -2);
  29. tswrite.Write(strdst.replace(re, function ($0, $1) {
  30.   return objsrc.hasOwnProperty($1) ? objsrc[$1] : $0;
  31. }));
  32. tswrite.close();
  33. WScript.Echo('Done.');
  34. WScript.Quit();
复制代码





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