找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21377|回复: 1

[原创代码] JS版文本分割器

[复制链接]
发表于 2011-11-3 23:04:51 | 显示全部楼层 |阅读模式
  1. /*
  2. *        JS版文本分割器 @BY Broly
  3. *        Broly's Blog:www.dreamlikes.net
  4. *        From bbs.bathome.net
  5. *
  6. *        简要说明:
  7. *                我已经将分割文本的函数做了封装,
  8. *                只要简单初始化就可以进行分割。
  9. *
  10. *        已知缺点:
  11. *                1.只支持GBK,Unicode,UFT8三种编码,
  12. *                        其他编码处理后可能出现乱码。
  13. *                        因为其他编码格式不常用,我就
  14. *                        没有进行处理了。
  15. *                2.虽然说可以按照处理后的数量或者
  16. *                        大小分割,实际只能够精确处理
  17. *                        Unicode编码的文本。这个是不得
  18. *                        已的做法,因为以我的能力,只
  19. *                        有这样才不会出现乱码。
  20. *
  21. *        封装的对象:Spliter(filepath,savepath)
  22. *                filepath: 要分割的目标文本
  23. *                savepath: 存储文件的目录
  24. *        属性:       
  25. *                filepath: 要分割的目标文本
  26. *                savepath: 存储文件的目录
  27. *       
  28. *        方法:
  29. *                checkEncoding(filepath): 检测文本编码
  30. *                          filepath: 要分割的目标文本
  31. *                splitOnSize(size): 按大小进行分割
  32. *                         size:分割的大小,单位KB
  33. *                splitOnCount(): 按照数量分割
  34. *                         count:分割的份数,正整数
  35. *
  36. */


  37. /*##############分####隔####线###################*/
  38. function Spliter(_filepath,_savepath)
  39. {               
  40.         //内部函数:出错提示
  41.         function msgError(msg)
  42.         {
  43.                 WScript.Echo(msg);
  44.                 WScript.Quit();
  45.         }

  46.         //定义判断文件编码的方法
  47.         function _checkEncoding(filepath)
  48.         {
  49.                 //定义变量以存储文件BOM
  50.                 var bom,encoding;
  51.                 //初始化Adodb.Stream对象
  52.                 var objStream = new ActiveXObject("Adodb.Stream");
  53.                 with(objStream)
  54.                 {
  55.                         type = 2;
  56.                         mode = 3;
  57.                         charset = "437";
  58.                         open();
  59.                         loadFromFile(filepath);
  60.                         bom = readtext(2);
  61.                         close();
  62.                 }
  63.                 //用escape()函数返回字符十六进制
  64.                 switch(escape(bom))
  65.                 {
  66.                         // FF FE
  67.                         case '%A0%u25A0':
  68.                                 encoding = 'Unicode';
  69.                                 break;
  70.                        
  71.                         // EF BB
  72.                         case '%u2229%u2557':
  73.                                 encoding = 'UTF-8';
  74.                                 break;
  75.                        
  76.                         //默认是GBK,如果都不是这三种编码处理后有可能出现乱码
  77.                         default:
  78.                                 encoding = 'GBK';
  79.                                 break;
  80.                 }
  81.                 //释放内存
  82.                 objStream = null;
  83.                
  84.                 //返回编码类型
  85.                 return encoding;
  86.         }
  87.        
  88.         //获取文件信息函数,在内部使用
  89.         function getFileSize(filepath,savepath)
  90.         {
  91.                 var fso = new ActiveXObject("Scripting.FileSystemObject");
  92.                
  93.                 try
  94.                 {
  95.                         if(!fso.FileExists(filepath))
  96.                         {
  97.                                 throw "源文件不存在";
  98.                         }
  99.                        
  100.                         var filesize = fso.GetFile(filepath).Size;
  101.                
  102.                         if(filesize == 0)
  103.                         {
  104.                                 throw "文件为空或者不存在";
  105.                         }
  106.                        
  107.                         if(!fso.FolderExists(savepath))
  108.                         {
  109.                                 throw "存储目录不存在";
  110.                         }
  111.                
  112.                 }
  113.                 catch(ex)
  114.                 {
  115.                         msgError(ex);
  116.                 }
  117.                
  118.                 //释放内存
  119.                 fso = null;
  120.                
  121.                 return filesize;
  122.         }
  123.        
  124.        
  125.         //内部使用,分割文件
  126.         function splitFile(filepath,savepath,singlesize,srCharset)
  127.         {
  128.                 var objStream = new ActiveXObject("Adodb.Stream");
  129.                 var arr = new Array();
  130.                 objStream.Mode = 3;
  131.                 var i = 0;
  132.                           
  133.                 with(objStream)
  134.             {
  135.                     if(srCharset!='Unicode')
  136.                     {
  137.                                 type = 2;
  138.                         charset = srCharset;
  139.                         open();
  140.                         loadFromFile(filepath);
  141.                         strText = readtext();
  142.                         close();
  143.                         charset = 'Unicode';
  144.                         open();
  145.                         writetext(strText);
  146.                         position = 0;
  147.                         type = 1;
  148.                 } else {
  149.                         type = 1;
  150.                         open();
  151.                         loadFromFile(filepath);
  152.                 }
  153.                 
  154.                 arr[0] = read(2);
  155.                 while(!EOS){arr[++i] = read(singlesize);}
  156.                      close();
  157.                      type = 2;
  158.                           charset = srCharset;
  159.              }
  160.              
  161.              for(i = 1 ; i<arr.length ; i++)
  162.              {
  163.                        with(objStream)
  164.                           {
  165.                              open();
  166.                               writetext(arr[i]);
  167.                                saveToFile(savepath + '\\book' + i + '.txt',2);
  168.                              close();
  169.                        }
  170.              }
  171.             
  172.             //释放内存
  173.             delete arr;
  174.             objStream = null;
  175.         }
  176.        
  177.         //定义按照大小分割的方法,单位KB
  178.         function _splitOnSize(size)
  179.         {
  180.                 getFileSize(this.filepath,this.savepath);
  181.                 //获取比较大的单文件字节
  182.                 var size1 = size*1024;
  183.                 var size2 = Math.round(size1);
  184.                 var singlesize = size2>=size1 ? size2 : size2+1;
  185.                 if(singlesize%2 !=0 ) {singlesize+=1;}
  186.                 splitFile(this.filepath,
  187.                                   this.savepath,
  188.                                   singlesize,
  189.                                   _checkEncoding(this.filepath)
  190.                                   );
  191.         }
  192.        
  193.         //定义按照数量分割的方法
  194.         function _splitOnCount(count)
  195.         {
  196.                 var filesize = getFileSize(this.filepath,this.savepath);
  197.                 //获取比较大的单文件字节
  198.                 var size1 = filesize/count;
  199.                 var size2 = Math.round(size1);
  200.                 var singlesize = size2>=size1 ? size2 : size2+1;
  201.                 if(singlesize%2 !=0 ) {singlesize+=1;}
  202.                 splitFile(this.filepath,
  203.                                   this.savepath,
  204.                                   singlesize,
  205.                                   _checkEncoding(this.filepath)
  206.                                   );
  207.         }
  208.        
  209.         //定义属性
  210.         this.filepath = _filepath;
  211.         this.savepath = _savepath;
  212.        
  213.         //定义方法
  214.         this.checkEncoding = _checkEncoding;
  215.         this.splitOnSize = _splitOnSize;
  216.         this.splitOnCount = _splitOnCount;
  217.        
  218. }

  219. /*##############分####隔####线###################*/

  220. //例子:
  221. var objSpliter = new Spliter('d:\\诛仙.txt','d:\\诛仙');

  222. objSpliter.splitOnCount(3);
  223. objSpliter = null;

  224. WScript.Echo('Succeed.');
复制代码

评分

参与人数 1PB +10 技术 +1 收起 理由
zqz0012005 + 10 + 1 原创鼓励

查看全部评分

发表于 2012-7-4 16:21:03 | 显示全部楼层
看功能貌似比较简单,但代码有些复杂,看看探先
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:34 , Processed in 0.018258 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表