Board logo

标题: [文本处理] 如何用批处理或vbs将文本每行数字段进行两两组合 [打印本页]

作者: qzwifi    时间: 2012-5-14 17:29     标题: 如何用批处理或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
作者: apang    时间: 2012-5-14 18:37

试试看
  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
复制代码

作者: qzwifi    时间: 2012-5-14 19:01

回复 2# apang


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

回复 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
复制代码

作者: qzwifi    时间: 2012-5-14 19:25

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

回复 4# gawk


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

  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位的,多一位就多一级嵌套,感觉很恐怖。。。
作者: qzwifi    时间: 2012-5-14 20:19

回复 6# apang


    楼上大哥辛苦了,您的代码正是我想要的效果。能否把 4位、5位、6位、7位的都写出来,小弟不胜感激!
作者: qzwifi    时间: 2012-5-14 21:30

回复 6# apang


    能写到4位或5位吗?确实有需要,望帮帮忙。。将非常感谢。。
作者: apang    时间: 2012-5-14 21:43

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
复制代码

作者: qzwifi    时间: 2012-5-14 22:05

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

回复 9# apang


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




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