中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 复制,全排列,替换综合在一起的一个问题
作者:
标题: 复制,全排列,替换综合在一起的一个问题 上一主题 | 下一主题
superchao115
初级用户





积分 26
发帖 32
注册 2009-5-28
状态 离线
『楼 主』:  复制,全排列,替换综合在一起的一个问题

我想在txt文档中输出一系列内容,格式如下:
mat_create_lam3( "TSCF", "", 1, ["T300", "shear", "crack", "failure"], ["1.000000E+000", "1.000000E+000", "1.000000E+000", "1.000000E+000"], ["0.000000E+000", "4.500000E+001", "9.000000E+001", "-4.50000E+001"], ["", "", "", ""], 4, "", "Create" )

---------------------------------------这里列举2个句子,在txt里是写在一行的。上面是一个,下面是一个。

mat_create_lam3( "TSCC", "", 1, ["T300", "shear", "crack", "crack"], ["1.000000E+000", "1.000000E+000", "1.000000E+000", "1.000000E+000"], ["0.000000E+000", "4.500000E+001", "9.000000E+001", "-4.50000E+001"], ["", "", "", ""], 4, "", "Create" )

………………
格式都是按上面的格式输出,总共有4种变化形式,T,S,C,F,这4个模式对应后面第一个中括号中内容。首字母都相同,T,对应T300,S,对应shear,C,对应crack,F对应failure.如第一个中的 TSCF,对应["T300", "shear", "crack", "failure"]。。每句就这2个地方有变化。列出所有的情况,也就是T,S,C,F的全排列的可能,总共有4*4*4*4=256种情况。
要将这256个句子写在一个文本文档里输出。

不知道我说清楚了没,批处理能否实现吗?谢谢各位热心朋友!

[ Last edited by superchao115 on 2009-6-4 at 09:25 ]

2009-6-4 09:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 2 楼』:  

4位数的排列应该只有24种吧?
难道 aaaa aaab  aaac 也算?
另外不知道你要输出怎样的格式,最好给出几个输出后的例子。
如果这个问题用bat来作,效率会很低,你的文件大概有多少行?

[ Last edited by 26933062 on 2009-6-4 at 10:54 ]



致精致简!
2009-6-4 10:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
superchao115
初级用户





积分 26
发帖 32
注册 2009-5-28
状态 离线
『第 3 楼』:  

AAAA,AAAB,AAAC,AAAD都算,所有的可能都算。256种
给的那2个句子就是格式呀。就是2个地方变化,其他的都一样。
上面给的那个放文本里就一行,256种情况,一种情况一句,共256句。

2009-6-4 11:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

文本中不能含有 半角 !符号
:
@echo off&setlocal enabledelayedexpansion
(for /f "tokens=1-2* delims=[]" %%i in (a.txt) do (
   for /f "tokens=1* delims=," %%a in ("%%i") do (
      set "num1=%%a"&set "num2=%%b"
      set "num1=!num1:~0,-6!"
    )
   set "str=%%j"&set "str=!str:,=!"&set "str=!str:"= !"
   for %%a in (!str!)do set var=%%a&set tem=!tem! !var:~0,1!&set "!var:~0,1!=%%a"
   for %%a in (!tem!) do (
      for %%b in (!tem!) do (
         for %%c in (!tem!) do (
            for %%d in (!tem!) do (
            echo !num1!"%%a%%b%%c%%d",!num2!"" ["!%%a!", "!%%b!", "!%%c!", "!%%d!"] %%k
))))))>b.txt
start b.txt
[ Last edited by 26933062 on 2009-6-4 at 11:45 ]



致精致简!
2009-6-4 11:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
superchao115
初级用户





积分 26
发帖 32
注册 2009-5-28
状态 离线
『第 5 楼』:  

运行不了哇?

2009-6-4 12:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

为什么我运行正确呢?

   此帖被 +1 点积分    点击查看详情   
评分人:【 superchao115 分数: +1  时间:2009-6-4 12:27




致精致简!
2009-6-4 12:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
superchao115
初级用户





积分 26
发帖 32
注册 2009-5-28
状态 离线
『第 7 楼』:  

我希望得到的结果是:
mat_create_lam3( "TSCF", "", 1, ["T300", "shear", "crack", "failure"], ["1.000000E+000", "1.000000E+000", "1.000000E+000", "1.000000E+000"], ["0.000000E+000", "4.500000E+001", "9.000000E+001", "-4.50000E+001"], ["", "", "", ""], 4, "", "Create" )

mat_create_lam3( "TSCC", "", 1, ["T300", "shear", "crack", "crack"], ["1.000000E+000", "1.000000E+000", "1.000000E+000", "1.000000E+000"], ["0.000000E+000", "4.500000E+001", "9.000000E+001", "-4.50000E+001"], ["", "", "", ""], 4, "", "Create" )

这样下去,256行。。。  可能你没明白我的意思。

2009-6-4 12:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
superchao115
初级用户





积分 26
发帖 32
注册 2009-5-28
状态 离线
『第 8 楼』:  



2009-6-4 12:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
superchao115
初级用户





积分 26
发帖 32
注册 2009-5-28
状态 离线
『第 9 楼』:  

谢谢你,我刚弄错了。不好意思,谢谢了,高手。

2009-6-4 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kendos
初级用户





积分 36
发帖 25
注册 2009-6-1
状态 离线
『第 10 楼』:  请问在批处理中如何忽略空格

例如set /p yn=
if "%yn%"=="y" goto 1
if "%yn%"=="n" goto 2
如果输入的字符中有空格或错误字符的话,它下面的分支语句if就起不到作用,它就只会按顺序执行

2009-6-4 20:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 11 楼』:  

如果前面字符固定的 我将4楼楼兄的简化下:
将开启变量延迟 放在FOR里
@echo off
(for /f "tokens=1,2* delims=[]" %%i in (a.txt) do (
   set num=%%i&set mun=%%k
   setlocal enabledelayedexpansion
   for %%a in (%%j)do set var=%%~a&set tem=!tem! !var:~0,1!&set "!var:~0,1!=%%~a"
   for %%a in (!tem!) do (
      for %%b in (!tem!) do (
         for %%c in (!tem!) do (
            for %%d in (!tem!) do (
            echo !num:~,-14!%%a%%b%%c%%d!num:~-10!["!%%a!", "!%%b!", "!%%c!", "!%%d!"]!mun!
))))))>d.txt
start d.txt




简单!简单!再简单!
2009-6-4 22:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: