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

[文本处理] 如何用批处理或vbs将文本每行数字段进行两两组合

本帖最后由 pcl_test 于 2016-7-19 12:31 编辑

如何用批处理或vbs将文本数字行进行复式


比如:
文本a.txt的内容为:

01 02 03 04 05 06
11 12 13 14 15 16
21 22 23 24 25 26

处理后复式为:

01 02
01 03
01 04
01 05
01 06
02 03
02 04
02 05
02 06
03 04
03 05
03 06
04 05
04 06
05 06
11 12
11 13
11 14
11 15
11 16
12 13
12 14
12 15
12 16
13 14
13 15
13 16
14 15
14 16
15 16
21 22
21 23
21 24
21 25
21 26
22 23
22 24
22 25
22 26
23 24
23 25
23 26
24 25
24 26
25 26

a.txt里面每一行的数字都与本行内的数字进行复式组合
上面是以复式2位数为例,需要复式组合为2位、3位、4位、5位的都可以
处理后保存为b.txt

例如 01 02 03 04 05 06
复式3位的就是:
01 02 03
01 02 04
01 02 05
01 02 06
01 03 04
01 03 05
01 03 06
01 04 05
01 04 06
01 05 06
02 03 04
02 03 05
02 03 06
02 04 05
02 04 06
02 05 06
03 04 05
03 04 06
03 05 06
04 05 06

4位的是:
01 02 03 04
01 02 03 05
01 02 03 06
01 02 04 05
01 02 04 06
01 02 05 06
01 03 04 05
01 03 04 06
01 03 05 06
01 04 05 06
02 03 04 05
02 03 04 06
02 03 05 06
02 04 05 06
03 04 05 06

5位的是:
01 02 03 04 05
01 02 03 04 06
01 02 03 05 06
01 02 04 05 06
01 03 04 05 06
02 03 04 05 06

试试看
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3.   setlocal enabledelayedexpansion
  4.   for %%a in (%%i) do set/a n+=1&set "A!n!=%%a"
  5.   for /l %%b in (1 1 !n!) do (
  6.     set/a m=%%b+1
  7.     for /l %%c in (!m! 1 !n!) do echo !A%%b! !A%%c!
  8.   )
  9.   endlocal
  10. )
  11. pause
复制代码

TOP

回复 2# apang


    楼上你好,需要的代码要能更改生成的位数跟保存为b.txt  
    比如我要把01 02 03 04 05 06复式为3位、4位、5位只需要在代码里修改一下位数便可
   您所提供的代码只能复式为2位而且不能保存为b.txt
    希望修改一下,谢谢!

TOP

回复 3# qzwifi
  1. @echo off
  2. (for /f "delims=" %%i in (a.txt) do (
  3.     setlocal enabledelayedexpansion
  4.     for %%a in (%%i) do set/a n+=1&set "A!n!=%%a"
  5.     for /l %%b in (1 1 !n!) do (
  6.         set/a m=%%b+1
  7.         for /l %%c in (!m! 1 !n!) do echo !A%%b! !A%%c!
  8.     )
  9.     endlocal
  10. ))>b.txt
复制代码

TOP

本帖最后由 qzwifi 于 2012-5-14 19:40 编辑

回复 4# gawk


     楼上提供的试了下是可以的,不过只是复式2位的,能否把复式为 3位 4位 5位的代码也写出来。。
   还有就是复式为6位与7位的,希望也能提供一下。。比如 01 02 03 04 05 06 07 08 来复式6位与7位
   或者教一下小弟如何直接修改想复式的位数。。谢谢!

TOP

  1. @echo off
  2. (for /f "delims=" %%i in (a.txt) do (
  3.   setlocal enabledelayedexpansion
  4.   for %%a in (%%i) do set/a n+=1&set "A!n!=%%a"
  5.   for /l %%b in (1 1 !n!) do (
  6.     set/a n1=%%b+1
  7.     for /l %%c in (!n1! 1 !n!) do (
  8.       set/a n2=%%c+1
  9.       for /l %%d in (!n2! 1 !n!) do echo !A%%b! !A%%c! !A%%d!
  10.     )
  11.   )
  12.   endlocal
  13. ))>b.txt
复制代码
复式3位的,多一位就多一级嵌套,感觉很恐怖。。。

TOP

回复 6# apang


    楼上大哥辛苦了,您的代码正是我想要的效果。能否把 4位、5位、6位、7位的都写出来,小弟不胜感激!

TOP

回复 6# apang


    能写到4位或5位吗?确实有需要,望帮帮忙。。将非常感谢。。

TOP

4位。其余你依葫芦画瓢。。。
  1. @echo off
  2. (for /f "delims=" %%i in (a.txt) do (
  3.   setlocal enabledelayedexpansion
  4.   for %%a in (%%i) do set/a n+=1&set "A!n!=%%a"
  5.   for /l %%b in (1 1 !n!) do (
  6.     set/a n1=%%b+1
  7.     for /l %%c in (!n1! 1 !n!) do (
  8.       set/a n2=%%c+1
  9.       for /l %%d in (!n2! 1 !n!) do (
  10.         set/a n3=%%d+1
  11.         for /l %%e in (!n3! 1 !n!) do echo !A%%b! !A%%c! !A%%d! !A%%e!
  12.       )
  13.     )
  14.   )
  15.   endlocal
  16. ))>b.txt
复制代码

TOP

本帖最后由 qzwifi 于 2012-5-14 22:07 编辑

回复 9# apang


   搞懂了,非常感谢您的帮助,谢谢!

TOP

返回列表