中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个按顺序转换字符串的批处理[原创]
作者:
标题: 一个按顺序转换字符串的批处理[原创] 上一主题 | 下一主题
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『楼 主』:  一个按顺序转换字符串的批处理[原创]

To All:
::此程序为批处理中字符串值的顺序转换而编写, 一般作为子程序被其他程序调用, 也可以将此程序稍做修改, 添加入特定批处理程序中作为子模块调用. @echo off if [%1]==[$] goto %2 if [%1]==[] goto nullargu :main 主模块: count, match 句参数列表可以根据需要重新设定和增减 set factor=%1 call %0 $ count 1 2 3 4 5 7 8 9 call %0 $ match c d e f g h i j goto display :count 计数模块: 根据指定参数 factor 设置变量值 #a1, #a2 if [%3]==[] goto overflow set #a1=%#a1%- if not [%#a1%]==[----------] goto count_2 set #a1= set #a2=%#a2%+ if [%#a2%]==[++++++++++] goto overflow :count_2 if [%3]==[%factor%] goto end shift goto count :match 匹配模块: 循环递增变量 #b1, #b2, 若分别与 #a1, #a2 相等, 则指定结果值为当前循环的参数 3. if [%3]==[] goto overflow set #b1=%#b1%- if not [%#b1%]==[----------] goto match_2 set #b1= set #b2=%#b2%+ if [%#b2%]==[++++++++++] goto overflow :match_2 if [%#a1%]==[%#b1%] if [%#a2%]==[%#b2%] set result=%3 if not [%result%]==[] goto end shift goto match :display 显示模块: 显示赋值结果 if [%error%]==[] echo %factor% convert %result% set result= set factor= set error= set #a1= set #a2= set #b1= set #b2= goto end :nullargu echo. echo Error: argument 1 not specified. echo. goto end verflow echo. echo Error: number is overflow. set error=overflow echo. goto end :end




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-1-29 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5798
发帖 1924
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 2 楼』:  

受益非浅,谢谢了。




熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境! 金狮電腦軟體工作室愿竭诚为您服务! QQ群:8393170(定期清理不发言者) 个人网站:www.520269.cn 电子邮件:doujiehui@vip.qq.com 微信公众号: doujiehui
2004-1-30 00:00
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (79207959)  编辑帖子  回复  引用回复
gotomsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 3 楼』:  

有很多疑问,能不能每一句详细解释一下,让更多的人学会?


2004-2-3 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 4 楼』:  

有很多疑问,能不能每一句详细解释一下,让更多的人学会? if [%1]==[] 与if "%1"==""是等同的吧? ; 这里的 if [%1]==[$]这个$代表什么呢?(票子?




一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2004-2-3 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re xiaojun:
if [%1]==[] 与if "%1"==""是等同的吧?
是等同的,只是编程习惯不同而已。我想将变量值与常量串的表示分离,但是很多人认为无此必要,我也无法强求。

[此贴子已经被作者于2004-2-3 20:37:45编辑过]





※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re xiaojun:
这里的 if [%1]==[$]这个$代表什么呢?(票子?
$与票子没有关系,你到真有想象力。这只是表示当前的运行状态是在子程序中运行,$是SUBROUTINE的首字母缩写的变形,这同样是习惯问题。




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 7 楼』:  

Re xiaojun: 真要句句详解,工作量太大了,本来我的时间便不充裕。 目前,此类程序仅供达者互相切磋,不宜普及。




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
SagInvoker
初级用户




积分 257
发帖 38
注册 2004-5-20
状态 离线
『第 8 楼』:  

看了之后觉得思路不错,但是有个问题,你的#a2和#b2拿来干什么??? 如果SHIFT用了8次都没找到[%3]变成了[], [#a1]根本就没办法累加到[----------] 所以 set #a1= set #a2=%#a2%+ if [%#a2%]==[++++++++++] goto overflow 根本就没机会执行,除非你一开始就给#a1赋值,但是不太可能吧?? #b2也是如此 所以我实在想不通你设定#a2和#b2有什么目的 不知道你是不是还有什么没说完的话,说来听听~~~~~~


2004-5-24 00:00
查看资料  发送邮件  发短消息  网志  OICQ (105695504)  编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 9 楼』:  

看不太懂




QQ:366840202 chenall.net
2004-5-26 00:00
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (366840202)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 10 楼』:  关于按序列转换串的讨论-1

Re SagInvoker:   感谢SagInvoker兄对此问题的关注,并提出自己的宝贵意见。   首先需要声明,1楼提供的只是一个样例程序,而非一个通用程序,所以它无法缺省地处理用户的各种需求,而是需要用户根据自己的需求修改源代码。   程序中的主模块中已经注明转换序列可以重新设定和调整,言外之意是若将它应用在自己的项目中,需要根据自己的需求调整转换序列,大多数时候这项工作是必须的。我在文中使用的12345678和cdefghij只是一个带有很大局限性的示例而已。   但是,作为程序本身,应该要尽可能的考虑到各种经常会发生的情况,以增强它的适应性。比如实际情况中的转换序列很可能超过10个字符的长度(例如字母表向ASCII码表的转换)。而我在程序中使用到的环境变量#a2和#b2,正是为了解决长序列转换的问题。因为系统的环境空间是有限的,我们如果完全将转换序列计数为相应长度的环境变量,将造成环境空间的用度紧张,所以我将#a2和#b2设计为序列索引的十位数,而#a1和#b1则为个位数。那段你有疑问的代码,实现的是由#a1到#a2的进位运算,它在很多情形下都是需要的。   所以说,程序中的那段代码虽然在演示的过程中不会执行,但不代表他在所有的情况下都不会执行,即使这些另外的情况需要修改原来的代码。   当然,程序本身应该可以有进一步的改善,比如说他可以自我处理用户自定义的转换序列,而不需要用户去更改源代码。但是,作为一个带有示意性的项目来说,这些界面问题不属于我们关注的焦点,我们首先需要完成的是核心功能的实现,其次才能考虑界面和框架问题。   欢迎SagInvoker兄能对此程序进行完善,简化代码或者增加功能,都是可以的。

[此贴子已经被作者于2004-6-2 上午 10:30:24编辑过]





※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-6-2 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: