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

[文本处理] [已经解决]批处理多列数据统计后的随机换位插入处理

本帖最后由 w1983912 于 2014-10-24 20:16 编辑

txt文本内容如下  纯中文字母数字标点符号     分隔符为#顺序数字#        @@代表是空数据,先统计列有多少行,遇到不处理      

1#1#长沙#2#电器#3#张三#4#
2#1#株洲#2#数码#3#刘小军#4#
3#1#衡阳#2#生活#3#王刚#4#
4#1#岳阳#2#汽车#3#季磊#4#
5#1#邵阳#2#服装#3#雷红#4#
6#1#娄底#2#食品#3#范伟#4#
7#1#@@#2#玩具#3#高会#4#
8#1#@@#2#服务#3#冷航名#4#
9#1#@@#2#家具#3#@@#4#        
10#1#@@#2#电脑#3#@@#4#

暂时有 10条数据   有4列  请考虑  实际有很多列         #5#  #6# 。。。。。。 #50#
第一列不变  
第2列有6行   需要执行一次就随机一次 针对列而言     7-10行是不变的
第3列有10行  需要执行一次就随机一次 针对列而言
第4列有8行   需要执行一次就随机一次 针对列而言     9-10行是不变的


如执行一次就 得到新txt:

1#1#邵阳#2#服装#3#雷红#4#
2#1#衡阳#2#生活#3#范伟#4#
3#1#岳阳#2#数码#3#刘小军#4#
4#1#株洲#2#食品#3#冷航名#4#
5#1#娄底#2#电器#3#高会#4#
6#1#长沙#2#家具#3#王刚#4#
7#1#@@#2#服务#3#张三#4#
8#1#@@#2#电脑#3#季磊#4#
9#1#@@#2#汽车#3#@@#4#        
10#1#@@#2#玩具#3#@@#4#

第2 3 4列 同时随机在本列换  需要确定该列换多少行   空数据是不换的     数据行数不多 望高效代码

有劳大家费心帮忙 先谢谢了

  1. @set @n=0;//&cscript -nologo -e:jscript "%~0"<a.txt>b.txt & pause & exit
  2. s = WScript.StdIn.ReadAll();
  3. a = [[], [], []];
  4. re = /#1#(.*)#2#(.*)#3#(.*)#4#/g;
  5. while ((b = re.exec(s)) != null) {
  6.         for (i=1; i<4; i++) {
  7.                 if (!/^@+$/.test(b[i])) a[i-1].push(b[i]);
  8.         }
  9. }
  10. for (i=1; i<4; i++) {
  11.         a[i-1].sort(function(){return Math.random()-0.5});
  12. }
  13. for (i=1; i<4; i++) {
  14.         j = -1;
  15.         re = new RegExp("(#" + i + "#)[^@]*?(#" + (i+1) + "#)", "g");
  16.         s = s.replace(re,
  17.                 function(s0, s1, s2) {
  18.                         j += 1;
  19.                         return s1 + a[i-1][j] + s2;
  20.                 }
  21.         )
  22. }
  23. WScript.Echo(s)
复制代码

TOP

回复 2# apang

你好 ,感谢帮忙 ,谢谢,大好人

TOP

返回列表