[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【挑战】替换*=为指定字符的批处理代码

『楼 主』: 【挑战】替换*=为指定字符的bat代码

在bat中

goto,call语句是确实比较耗时;http://bbs.bathome.net/thread-5993-1-1.html

若*,=的替换问题解决了

几乎可将所有代码的goto循环转换为for循环

现在征集最简洁最快速的代码,【当然不能含有goto或call命令了】

测试字符串:*/*\**,.=*,...=///&+wodfdfd**==...***************==========...

将*替换为星星
将=替换为等号

有挑战者请上擂台。。。,
1

评分人数

谁能解决,我以后在论坛称谁为


         擂王

[ 本帖最后由 plp626 于 2009-10-12 19:15 编辑 ]

TOP

我先说下,如果if 逐一判断字符,那么势必要先确定字符串的长度,这个花费时间在3.5个时间单位,
【1个时间单位规定为1个set赋值所耗费的时间】
然后if 判断,但是
预处理一个for ..或 if .. 或 else ... 相当于0.5~0.6个set命令的花费时间
对于一个120个字符串长度的代码至少要耗费3.5+120*0.6=75+个时间单位
所以这个并不是很理想的代码,【当然要比goto的方法快N倍】

如果有直接set赋值的代码,那么则是质的飞跃
但是这得大家挖掘预处理机制,对^!%充分利用

TOP

原帖由 HAT 于 2009-10-18 13:08 发表
群里有人讨论sed,我贴一下:
C:\Test>type a.txt
:*/*\**,.=*,...=///&+wodfdfd**==...***************==========...

C:\Test>sed -e "s/\*/星星/g"  -e "s/=/等号/g" a.txt
:星星/星星\星星星星,.等号星星 ...


如果用sed我也不会提出这个问题了


本贴为cmd技术探讨而发帖

http://www.cn-dos.net/forum/viewthread.php?tid=49028&fpage=4
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=*/*\**,.=*,...=///&+wodfdfd**==...***************==========..."
  3. set ss=&for /l %%a in (0 1 120)do if "!str:~%%a,1!"=="*" (set "ss=!ss!*") else if "!str:~%%a,1!"=="=" (set "ss=!ss!﹦") else if "!str:~%%a,1!" neq "" set "ss=!ss!!str:~%%a,1!"
  4. echo !ss!&pause
复制代码
这个是那边联盟的代码,综合简洁+效率,目前也就只能这样

但我始终没有放弃"一招致死"的代码,雷王的位子还在,等待高人去占

[ 本帖最后由 plp626 于 2009-10-27 21:44 编辑 ]

TOP

目前,直接替换法:
我还是=无法替换
连续的*~无法替换;
但是对于*~前见个字符发现可以替换:
  1. set str1=123 *56789 *abcd ****
  2. set str2=123 ~56789 ~abcd ~~~~
  3. echo %str1: *=#%
  4. echo %str2: ~=$%
复制代码

TOP

返回列表