Board logo

标题: [文本处理] 【已解决】批处理 10选4的代码 如何扩展运用到10选5 [打印本页]

作者: 思想之翼    时间: 2016-1-4 16:54     标题: 【已解决】批处理 10选4的代码 如何扩展运用到10选5

本帖最后由 思想之翼 于 2016-1-6 09:41 编辑

http://www.bathome.net/viewthrea ... ghlight=&page=2
以上代码适用于10选4  扩展运用到10选5  试着自己解决了问题。见4楼。
作者: aa77dd@163.com    时间: 2016-1-4 18:37

楼主这些干什么用的
作者: 回家路上    时间: 2016-1-4 19:05

O(∩_∩)O哈!开拓别人的思维~~~~~~
作者: 思想之翼    时间: 2016-1-4 19:13

本帖最后由 思想之翼 于 2016-1-6 09:38 编辑

回复 2# aa77dd@163.com
自己修改的
  1. @ECHO OFF&setlocal enabledelayedexpansion
  2. for /l %%i in (0,1,9) do set /a _%%i=%%i+1
  3. for /l %%i in (1,1,4) do (
  4.     for /l %%j in (!_%%i!,1,5) do (
  5.         set /an+=1
  6.         set "$!n!=%%i %%j"
  7.     )
  8. )
  9. for /l %%i in (0,1,9) do (
  10.     for /l %%j in (0,1,9) do (
  11.         set /a "$%%i_%%j=(%%i+%%j)%%10"
  12.     )
  13. )
  14. for /l %%i in (1001,1,1252) do (
  15.     set n=%%i
  16.     md "c:/数据/数据1/!n:~1!" 2>nul
  17. )
  18. set n=1000
  19. for /l %%a in (1,1,9) do (
  20.     for /l %%b in (!_%%a!,1,10) do (
  21.         for /l %%c in (!_%%b!,1,10) do (
  22.             for /l %%d in (!_%%c!,1,10) do (
  23.             for /l %%e in (!_%%d!,1,10) do (   
  24.                 set /an+=1
  25.                 for /l %%f in (100000,1,199999) do (
  26.                     set s=%%f
  27.                     for /f "tokens=1-10" %%0 in ("!$%%a! !$%%b! !$%%c! !$%%d! !$%%e!") do (
  28.                         for /f "tokens=1-5" %%i in ("!s:~%%0,1!_!s:~%%1,1! !s:~%%2,1!_!s:~%%3,1! !s:~%%4,1!_!s:~%%5,1! !s:~%%6,1!_!s:~%%7,1! !s:~%%8,1!_!s:~%%9,1!") do (
  29.                             set /a t=1!$%%i!!$%%j!!$%%k!!$%%l!!$%%m!
  30.                             >>"c:/数据/数据1/!n:~1!/!t:~1!.txt" set /p =!s:~1! <nul
  31.                         )
  32.                     )
  33.                 )
  34.             )
  35.         )
  36.     )
  37. ))
  38. pause
复制代码

作者: aa77dd@163.com    时间: 2016-1-4 19:13

回复 3# 思想之翼

楼主用过 Mathematica 吗? 或者 其他的数学软件
作者: aa77dd@163.com    时间: 2016-1-4 21:00

回复 7# 思想之翼

如果你安装了 Mathematica

用下面的代码, 你就可以看到眉目
  1. T = {a, b, c, d, e};
  2. P = Subsets[T, {2}]
  3. Q = Map[(Mod[(#[[1]] + #[[2]]), 10]) &, P]
  4. Q = Subsets[Q, {4}]
  5. T1 = Table[{a, b, c, d}, {a, 0, 9}, {b, 0, 9}, {c, 0, 9}, {d, 0, 9}];
  6. T1 = Flatten[T1, 3]
复制代码

作者: codegay    时间: 2016-1-4 21:32

回复 9# aa77dd@163.com


   在线用 wolfram 可以吗
作者: aa77dd@163.com    时间: 2016-1-4 21:41

回复 10# codegay

没试过, 我自己也很久没有用 Mathematica 了, 本来会用的函数也不多, 上面用到的几个函数都是刚刚查了帮助和在线搜索后才基本了解的

楼主的问题, 始终都没有离开数学, 用这个数学软件来解决, 是非常理想的, 应该仅用几行代码就完全可以实现, 比如 5 行以内
作者: aa77dd@163.com    时间: 2016-1-4 21:55

本帖最后由 aa77dd@163.com 于 2016-1-4 22:11 编辑

回复 12# 思想之翼


来源于 for /? 的帮助
  1.         tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
  2.                           的 for 本身。这会导致额外变量名称的分配。m-n
  3.                           格式为一个范围。通过 nth 符号指定 mth。如果
  4.                           符号字符串中的最后一个字符星号,
  5.                           那么额外的变量将在最后一个符号解析之后
  6.                           分配并接受行的保留文本。
  7.                           
  8.                           
  9. FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
  10. ...
  11.     %i 在 for 语句中显式声明,%j 和 %k 是通过
  12.     tokens= 选项隐式声明的。可以通过 tokens= 一行
  13.     指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或
  14.     "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;
  15.     而且,不能同时使用超过 52 个。
复制代码
这种帮助信息 真的不好明白, 我当初一样了明白不了

来实际的, 在 cmd 的命令行界面运行
  1. echo off & for /f "tokens=2-4" %i in ("头 胸 腹 臀 尾") do echo;[%h],[%i],[%j],[%k],[%l]
复制代码
结果是
[%h],[胸],[腹],[臀],[%l]

头 胸 腹 臀 尾    左边的东东 默认用刀, 呃,不, 是空格为分隔被分解成 5 个部分, 可以分配到最多 5 个令牌, tokens=2-4 指定了只取其中的 第 2 个--第 4 个分配给令牌们, 所以 头 和 尾 都被砍掉了

胸 从令牌 %i 开始分配, 接着按顺序来嘛,  腹 分配给 %j, 臀 分配给 %k.   分(body)完毕, 没有流血, 不算血腥吧
作者: WHY    时间: 2016-1-4 21:57

回复 5# 思想之翼


    批处理 for 引用变量时一般是用单个字母或数字前面加上%%来表示(例如%%i),%%10会被认为是非法的。

楼主试试把27行%%1改成%%0,28行从%%0到%%9
作者: codegay    时间: 2016-1-4 22:20

回复 4# 回家路上


    所以他常年处于问人要代码。。




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