|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『楼 主』:
一个按顺序转换字符串的批处理[原创]
To All:
Quote: | ::此程序为批处理中字符串值的顺序转换而编写, 一般作为子程序被其他程序调用, 也可以将此程序稍做修改, 添加入特定批处理程序中作为子模块调用.
@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者
积分 5792
发帖 1921
注册 2003-6-20 来自 金獅電腦軟體工作室
状态 离线
|
『第
2 楼』:
受益非浅,谢谢了。
|
熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
|
|
2004-1-30 00:00 |
|
|
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:
Quote: | 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:
Quote: | 这里的 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 |
|
|
chenall
银牌会员
积分 1276
发帖 469
注册 2002-12-23 来自 福建泉州
状态 离线
|
|
2004-5-26 00:00 |
|
|
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 |
|