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

[文本处理] 【已解决】BAT或VBS:满足条件求数值,并导入文本

[复制链接]
发表于 2015-11-8 02:00:23 | 显示全部楼层
  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,1210) do (
  15.     set n=%%i
  16.     md "D:/数据/!n:~1!" 2>nul
  17. )
  18. set n=1000
  19. for /l %%a in (1,1,7) 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.                 set /an+=1
  24.                 for /l %%e in (100000,1,199999) do (
  25.                     set s=%%e
  26.                     for /f "tokens=1-8" %%1 in ("!$%%a! !$%%b! !$%%c! !$%%d!") do (
  27.                         for /f "tokens=1-4" %%i in ("!s:~%%1,1!_!s:~%%2,1! !s:~%%3,1!_!s:~%%4,1! !s:~%%5,1!_!s:~%%6,1! !s:~%%7,1!_!s:~%%8,1!") do (
  28.                             set /a t=10!$%%i!!$%%j!!$%%k!!$%%l!+1
  29.                             >>"D:/数据/!n:~1!/!t:~1!.txt" set /p =!s:~1! <nul
  30.                         )
  31.                     )
  32.                 )
  33.             )
  34.         )
  35.     )
  36. )
  37. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

 楼主| 发表于 2015-11-8 03:03:36 | 显示全部楼层
本帖最后由 思想之翼 于 2015-11-8 05:31 编辑

回复 16# terse
感谢您的帮助!
代码正在测试。有些问题还需您的帮助:
1、发现写入的文本数据末尾,没有添加回车符。
2、部分条件形态无数值,没有导入空文本。如果事后添加00001.txt-10000.txt之间未出现序号的空文本,这样的代码如何写?
3、如果是两两相减取绝对值,下句如何修改?
set /a "$%%i_%%j=(%%i+%%j)%%10"
发表于 2015-11-9 11:50:41 | 显示全部楼层
回复 17# 思想之翼
问题1 问题2
在代码最后 加上
  1. for /l %%i in (1001,1,1210) do (
  2.     set n=%%i
  3.      for /l %%j in (100001,1,110000) do (
  4.          set s=%%j
  5.          >>"D:/数据/!n:~1!/!s:~1!.txt" echo;
  6.      )
  7. )
复制代码
问题3 将第11行代码 替换为
  1. set /a "n=%%i-%%j,$%%i_%%j=(n>>31|1)*n"
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2015-11-9 17:12:36 | 显示全部楼层
本帖最后由 wankoilz 于 2015-11-9 17:15 编辑

练习awk!
感觉效率是个问题,100000个五位数共2千一百万个组合,仅仅是装入数组就花了34秒
如果再不停的写入文件,估计够呛。
以下代码针对第一个问题,仅仅是将2千一百万个组合装入数组,并没有实现写入文本,因为那样太慢,只当练手。
  1. # & cls & setlocal enabledelayedexpansion
  2. # & cls & echo !time! & echo; | gawk -f %0 >con & echo !time! & pause & exit

  3. END{
  4.      #将100000个“五位数”的共21000000个四位组合装入数组
  5.      s="0123456789"
  6.          for(i=1;i<=length(s);i++){arr_num[i]=substr(s,i,1)}
  7.          for(a=0;a<=9;a++){
  8.              for(b=0;b<=9;b++){
  9.                      for(c=0;c<=9;c++){
  10.                              for(d=0;d<=9;d++){
  11.                                      for(e=0;e<=9;e++){
  12.                                              str_5=a""b""c""d""e
  13.                                                  for(x=1;x<=5;x++){arr_str_5[x]=substr(str_5,x,1)}
  14.                                                  str_10=""
  15.                                                  for(f=1;f<=5;f++){
  16.                                                      for(g=f+1;g<=5;g++){
  17.                                                              remainder=(arr_str_5[f]+arr_str_5[g]) % 10
  18.                                                              str_10=str_10""remainder
  19.                                                          }
  20.                                                  }
  21.                                                  count_210=0;str_4=""
  22.                                                  for(x=1;x<=10;x++){arr_str_10[x]=substr(str_10,x,1)}
  23.                                                  for(m=1;m<=10;m++){
  24.                                                      for(n=m+1;n<=10;n++){
  25.                                                              for(o=n+1;o<=10;o++){
  26.                                                                      for(p=o+1;p<=10;p++){
  27.                                                                              count_210+=1
  28.                                                                              str_4=arr_str_10[m]""arr_str_10[n]""arr_str_10[o]""arr_str_10[p]
  29.                                                                              arr_rem_com[str_5][count_210]=str_4
  30.                                                                          }
  31.                                                                  }
  32.                                                          }
  33.                                                  }
  34.                                          }
  35.                                  }
  36.                          }
  37.                  }
  38.          }
  39.         #测试查看19999的210个组合情况
  40.         for(i=1;i<=210;i++){
  41.              print arr_rem_com[19999][i]
  42.         }
  43. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk
为什么代码显示出的缩进会这么大....实际没这么夸张
 楼主| 发表于 2015-11-9 19:15:52 | 显示全部楼层
回复 18# terse
感谢您的热心帮助!
在末尾添加如下代码  可以在001-210文件夹里  添加00001-10000之间未出现名称的空文本  然后全部文本添加回车符
如果要在001-210文件夹里所有文本数据末尾先添加回车符  然后再在001-210文件夹里添加00001-10000之间未出现名称的空文本,下列代码如何修改?
for /l %%i in (1001,1,1210) do (
    set n=%%i
     for /l %%j in (100001,1,110000) do (
         set s=%%j
         >>"D:/数据/!n:~1!/!s:~1!.txt" echo;
     )
)
发表于 2015-11-9 19:18:53 | 显示全部楼层
回复 20# 思想之翼

已经添加
 楼主| 发表于 2015-11-9 19:51:29 | 显示全部楼层
回复 21# terse

您给出的代码,是先添加未出现名称的空文本,再在所有文本中添加回车符,这样先前添加的空文本,也加了回车符
如果先在文本数据末尾添加回车符 ,再添加未出现名称的空文本,您给出的代码如何修改?
发表于 2015-11-9 21:48:44 | 显示全部楼层
回复 22# 思想之翼

那就加个判断
  1. if exist "D:/数据/!n:~1!/!s:~1!.txt" (>>"D:/数据/!n:~1!/!s:~1!.txt" echo;) else >"D:/数据/!n:~1!/!s:~1!.txt" echo;
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 07:21 , Processed in 0.022940 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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