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

[特效代码] 批处理+js实现txt文本按列对齐(左对齐/右对齐/水平居中/两端对齐)

本帖最后由 pcl_test 于 2016-7-31 14:58 编辑

源码及源文件
  1. /*&cls
  2. @echo off
  3. set "dstfd=$处理结果"
  4. if not exist "%dstfd%\" md "%dstfd%\"
  5. (dir /a-d/b "测试文本.txt"^|find /v "%dstfd%")|cscript -nologo -e:jscript "%~f0" "%dstfd%"
  6. pause&exit
  7. */
  8. //参数设置
  9. var delims = '[ \\s]+';    //指定列分隔符,默认以空格、制表符(tab)作为分割列,支持正则表达式
  10. var fillchr = ' ';    //设置对齐填充字符,只支持单字节字符,默认为空格
  11. var p = 4;    //设置对齐后两列间最短处填充字符的数量,默认4个
  12. var align = 0;    //设置对齐格式,0为左对齐,1为右对齐,2为伪水平居中,3为左向两端对齐,4为右向两端对齐,默认左对齐
  13. var bl = 0;    //设置是否保留空白行,0为删除,1为保留,默认不保留
  14. //预处理
  15. var fso = new ActiveXObject('Scripting.FileSystemObject'), space='';
  16. var dstfd = WSH.Arguments(0);
  17. var reg = new RegExp(delims);
  18. for(var i=0; i<200; i++)space += fillchr;
  19. if(fillchr==''||delims==''||!/^[0-4]$/.test(align)||!/^[01]$/.test(bl)||!/^[2-9]|1\d*$/.test(p)){WSH.echo('参数有误!');WSH.quit()}
  20. //主程序
  21. while(!WSH.StdIn.AtEndOfStream){
  22.     var t={}, len=0;
  23.     var line = WSH.StdIn.ReadLine();
  24.     try{
  25.         var txt = (fso.OpenTextFile(line, 1).ReadAll()+'\r\n').replace(/\s+$/, '');
  26.         ReadFile();
  27.         switch(align)
  28.         {
  29.             case 1:var txt = RigthAlign();break;
  30.             case 2:var txt = CenterAlign();break;
  31.             case 3:var txt = LJustifyAlign();break;
  32.             case 4:var txt = RJustifyAlign();break;
  33.             default:var txt = LeftAlign();
  34.         }
  35.     }catch(e){}
  36.     var file = fso.GetFile(line);
  37.     var f = dstfd +'\\'+ file.Name;
  38.     var i = 1;
  39.     while(fso.FileExists(f))f = dstfd+'\\'+fso.GetBaseName(file)+'_'+(i++)+'.'+fso.GetExtensionName(file);
  40.     fso.CreateTextFile(f, 2).Write(txt);
  41.     t=null;
  42. }
  43. WSH.Echo('Done');
  44. //读取文本内容和各种预统计
  45. function ReadFile(){
  46.     var tmp = txt.split(/[ \s]*\r\n/);
  47.     for(var i=0; i<tmp.length; i++){
  48.         var tr = tmp[i].replace(/^[ \s]*|[ \s]*$/, '').split(reg);
  49.         if(tr.length-1 >= len)len=tr.length-1;
  50.         for(var j=0; j<tr.length; j++){
  51.             var l=n=0;
  52.             for(var k=0; k<tr[j].length; k++){
  53.                 var c = tr[j].charCodeAt(k)
  54.                 if((c>=0x0001 && c<=0x007e)||(c>=0xff60 && c<=0xcff9f)){
  55.                     l += 1;
  56.                 }else{
  57.                     n++;
  58.                     l += 2;
  59.                 }
  60.             }
  61.             if(align == 2)t['cell'+i+j.toString()] = l;
  62.             if(n > 0)t[i+j.toString()] = n;
  63.             if(!t['max'+j]){
  64.                 t['max'+j] = l;
  65.             }else{
  66.                 if(l >= t['max'+j])t['max'+j] = l;
  67.             }
  68.         }
  69.     }
  70. }
  71. //左对齐
  72. function LeftAlign(){
  73.     var tmp = txt.split('\r\n'), m=0, s='';
  74.     for(var i=0; i<tmp.length; i++){
  75.         if(!/^[ \s]*$/.test(tmp[i])){
  76.             var tr = tmp[i].replace(/^[ \s]*|[ \s]*$/, '').split(reg), line='';
  77.             for(var j=0; j<tr.length-1; j++){
  78.                 if(t[m+j.toString()]){
  79.                     line += (tr[j]+space).slice(0, t['max'+j]-t[m+j.toString()]+p);
  80.                 }else line += (tr[j]+space).slice(0, t['max'+j]+p);
  81.             }
  82.             m++;
  83.             s += line + tr[tr.length-1] + '\r\n';   
  84.         }else if(bl == 1)s += '\r\n';
  85.     }
  86.     return s;
  87. }
  88. //右对齐
  89. function RigthAlign(){
  90.     var tmp = txt.split('\r\n'), m=0, s='';
  91.     for(var i=0; i<tmp.length; i++){
  92.         if(!/^[ \s]*$/.test(tmp[i])){
  93.             var tr = tmp[i].replace(/^[ \s]*|[ \s]*$/, '').split(reg), line='';
  94.             for(var j=0; j<tr.length; j++){
  95.                 if(t[m+j.toString()]){
  96.                     line += (space+tr[j]).slice(-t['max'+j]+t[m+j.toString()])+(j<tr.length-1?space.substr(0, p):'');
  97.                 }else line += (space+tr[j]).slice(-t['max'+j])+(j<tr.length-1?space.substr(0, p):'');
  98.             }
  99.             m++;
  100.             s += line + '\r\n';   
  101.         }else if(bl == 1)s += '\r\n';
  102.     }
  103.     return s;
  104. }
  105. //伪水平居中
  106. function CenterAlign(){
  107.     var tmp = txt.split('\r\n'), n=m=0, s='';
  108.     for(var i=0; i<tmp.length; i++){
  109.         if(!/^[ \s]*$/.test(tmp[i])){
  110.             var tr = tmp[i].replace(/^[ \s]*|[ \s]*$/, '').split(reg), line='';
  111.             for(var j=0; j<tr.length; j++){
  112.                 var a = (t['max'+j]-t['cell'+n+j.toString()])/2;
  113.                 var b = parseInt(a);
  114.                 if(b == a){
  115.                     if(a != 0){
  116.                         line += space.slice(0, b)+tr[j]+(j==tr.length-1?'':space.slice(0, b+p));
  117.                     }else line += tr[j]+(j==tr.length-1?'':space.slice(0, p));
  118.                 }else{
  119.                     line += space.slice(0, b+1)+tr[j]+(j==tr.length-1?'':space.slice(0, b+p));
  120.                 }
  121.             }
  122.             n++;
  123.             s += line + '\r\n';   
  124.         }else if(bl == 1)s += '\r\n';
  125.     }
  126.     return s;
  127. }
  128. //左向两端对齐
  129. function LJustifyAlign(){
  130.     var tmp = txt.split('\r\n'), m=0, s='';
  131.     for(var i=0; i<tmp.length; i++){
  132.         if(!/^[ \s]*$/.test(tmp[i])){
  133.             var tr = tmp[i].replace(/^[ \s]*|[ \s]*$/, '').split(reg), line='';
  134.             for(var j=0; j<tr.length; j++){
  135.                     if(j<len){
  136.                         if(tr.length>1 && j<tr.length-1){
  137.                             if(t[m+j.toString()]){
  138.                                 line += (tr[j]+space).slice(0, t['max'+j]-t[m+j.toString()]+p);
  139.                             }else line += (tr[j]+space).slice(0, t['max'+j]+p);
  140.                         }else line += tr[j];
  141.                     }else{
  142.                         if(t[m+j.toString()]){
  143.                             line += (space+tr[j]).slice(-t['max'+j]+t[m+j.toString()]);
  144.                         }else line += (space+tr[j]).slice(-t['max'+j]);
  145.                     }
  146.             }
  147.             m++;
  148.             s += line + '\r\n';   
  149.         }else if(bl == 1)s += '\r\n';
  150.     }
  151.     return s;
  152. }
  153. //右向两端对齐
  154. function RJustifyAlign(){
  155.     var tmp = txt.split('\r\n'), m=0, s='';
  156.     for(var i=0; i<tmp.length; i++){
  157.         if(!/^[ \s]*$/.test(tmp[i])){
  158.             var tr = tmp[i].replace(/^[ \s]*|[ \s]*$/, '').split(reg), line='';
  159.             for(var j=0; j<tr.length; j++){
  160.                 if(tr.length>1){
  161.                     if(j<1){
  162.                         if(t[m+j.toString()]){
  163.                             line += (tr[j]+space).slice(0, t['max'+j]-t[m+j.toString()]+p);
  164.                         }else line += (tr[j]+space).slice(0, t['max'+j]+p);
  165.                     }else{
  166.                          if(t[m+j.toString()]){
  167.                             line += (space+tr[j]).slice(-t['max'+j]+t[m+j.toString()])+(j<tr.length-1?space.slice(0, p):'');
  168.                          }else line += (space+tr[j]).slice(-t['max'+j])+(j<tr.length-1?space.slice(0, p):'');
  169.                     }
  170.                 }else line += tr[j];
  171.             }
  172.             m++;
  173.             s += line + '\r\n';   
  174.         }else if(bl == 1)s += '\r\n';
  175.     }
  176.     return s;
  177. }
复制代码
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
2

评分人数

    • CrLf: 感谢分享PB + 10 技术 + 1
    • Bella: 感谢分享技术 + 1



版主你应该发到原创代码区
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 pcl_test 于 2016-7-27 14:38 编辑

测试文本内容:
  1. 111          伍3df4fr      ytRH%!肆     1111111
  2.    
  3.  abcd壹f    22222          22          dddddd
  4. 3344443           333TDFSG
  5.       6ye3tr4
  6.                  
  7.     
  8.     4          RHUDJH      44          44贰44
  9. !%^()|<>*       叁        555555
复制代码
处理结果:
一、左对齐(参数align = 0; bl = 0)
  1. 111          伍3df4fr    ytRH%!肆    1111111
  2. abcd壹f      22222       22          dddddd
  3. 3344443      333TDFSG
  4. 6ye3tr4
  5. 4            RHUDJH      44          44贰44
  6. !%^()|<>*    叁          555555
复制代码
二、右对齐(参数align = 1; bl = 1)
  1.       111    伍3df4fr    ytRH%!肆    1111111
  2.   abcd壹f       22222          22     dddddd
  3.   3344443    333TDFSG
  4.   6ye3tr4
  5.         4      RHUDJH          44     44贰44
  6. !%^()|<>*          叁      555555
复制代码
三、左向两端对齐(参数fillchr = '-'; align = 3; bl = 0)
  1. 111----------伍3df4fr----ytRH%!肆----1111111
  2. abcd壹f------22222-------22-----------dddddd
  3. 3344443------333TDFSG
  4. 6ye3tr4
  5. 4------------RHUDJH------44-----------44贰44
  6. !%^()|<>*----叁----------555555
复制代码
四、右向两端对齐(参数align = 4; bl = 1)
  1. 111          伍3df4fr    ytRH%!肆    1111111
  2. abcd壹f         22222          22     dddddd
  3. 3344443      333TDFSG
  4. 6ye3tr4
  5. 4              RHUDJH          44     44贰44
  6. !%^()|<>*          叁      555555
复制代码
五、伪水平居中(参数align = 2; bl = 1)
  1.    111       伍3df4fr    ytRH%!肆    1111111
  2. abcd壹f       22222        22        dddddd
  3. 3344443     333TDFSG
  4. 6ye3tr4
  5.     4         RHUDJH        44        44贰44
  6. !%^()|<>*       叁        555555
复制代码

TOP

返回列表