中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
<   <<   [1] [2] [3]  >>   >
作者:
标题: 新的删除空格问题?? 上一主题 | 下一主题
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 16 楼』:  

Originally posted by 26933062 at 2008-5-29 09:35 PM: 呵呵,楼上的就真的存在效率问题了。
我也考虑过效率问题 只是想过另外一个问题:系统处理!str:~0,1!进行变量截取时不需要花时间吗? 结合大家的讨论,变量截取的效率可能比findstr高吧 我觉得WANKOILZ兄的还应该完善一下 if "!str:~0,1!"=="[" if "!str:~-1"=="]" echo. [ Last edited by zqz0012005 on 2008-5-29 at 09:56 PM ]


   此帖被 +1 点积分    点击查看详情   
评分人:【 amio 分数: +1  时间:2008-5-29 22:21




2008-5-29 21:54
查看资料  发短消息  网志  OICQ (411976538)  编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 17 楼』:  

呵呵,我只是想针对楼主那种简单形式的文本,就没用完善的方法,管道+findstr会降低效率。当然要考虑周全也只有用findstr了。


2008-5-29 21:58
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
amio
中级用户





积分 206
发帖 93
注册 2007-8-16
状态 离线
『第 18 楼』:  

我那不是简单的文本 就是改inf 文件 先帮我看看 15楼的问题吧


2008-5-29 22:02
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

判断有 [ 符号就显示一空行。 :
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (a.txt) do (
   set "str=%%a"
   set "str=!str:[=!"
   if not "%%a"=="!str!" echo.
   echo %%a
)
pause


   此帖被 +2 点积分    点击查看详情   
评分人:【 amio 分数: +2  时间:2008-5-29 22:20




致精致简!
2008-5-29 22:07
查看资料  发短消息  网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 20 楼』:  

同时去掉行前面的空格:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
echo %%i|findstr "^\[.*\]$">nul&&echo.
for %%j in (%%i) do set str=!str! %%j
echo !str:~1!&set str=
)
pause>nul
[ 和 ] 符号在findstr里用作普通符号的话要用 \ 转义才行,26和zq兄忽视了,我也是测试前面的代码后发现的。 [ Last edited by WANKOILZ on 2008-5-29 at 10:27 PM ]


2008-5-29 22:16
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

19 楼代码可以去掉行前面的空格啊。。。。。 echo %%i|findstr "^\[.*\]$">nul 此种方法效率很低啊。




致精致简!
2008-5-29 22:23
查看资料  发短消息  网志   编辑帖子  回复  引用回复
amio
中级用户





积分 206
发帖 93
注册 2007-8-16
状态 离线
『第 22 楼』:  

Originally posted by WANKOILZ at 2008-5-29 10:16 PM: 同时去掉行前面的空格:[code]@echo off&setlocal enabledelayedexpansion for /f "delims=" %%i in (1.txt) do ( echo %%i|findstr "^\[.*\]$">nul&&echo. fo ...
这个 测试 。。。 cc dd 会把cc 一起给删掉


2008-5-29 22:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 23 楼』:  

回楼上:已经改进,但是不如26933062的好用,tokens=*是保证去掉行前的空格,并且后面的数据不变,应该是最好的方法了。 至于findstr "^\[.*\]$">nul 这种格式我也是第一次用,但是"^[.*]$"这种格式不行呢。


2008-5-29 22:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 24 楼』:  

忘记了“[”、“]”在findstr中是特殊字符 tokens=*去掉行首空格,小楼总能别出心裁,果然经济实惠! [ Last edited by zqz0012005 on 2008-5-29 at 10:32 PM ]




2008-5-29 22:30
查看资料  发短消息  网志  OICQ (411976538)  编辑帖子  回复  引用回复
26933062
银牌会员





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

完全匹配 [.....] 的方法
@echo off
for /f "delims=:" %%a in ('findstr /n ".*\[..*\]" a.txt') do set .%%a=a
for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
   if defined .%%a echo.
   for /f "tokens=*" %%i in ("%%b") do echo.%%i
)
pause


   此帖被 +2 点积分    点击查看详情   
评分人:【 WANKOILZ 分数: +2  时间:2008-5-29 22:41




致精致简!
2008-5-29 22:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 26 楼』:  

楼上方法真独特。 但是我对 .*\[..*\] 不解: 1、为什么后面不加 .* 如:.*\[..*\].* 2、..* 这里的两点是什么意思呢。 劳驾楼上讲解下。


2008-5-29 22:45
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
amio
中级用户





积分 206
发帖 93
注册 2007-8-16
状态 离线
『第 27 楼』:  

还有个问题。。。 能不能删除 ; 打头的行 就是注释 而不删除字符中间夹着的 ; ; asdasdasd asd;asd ; qweqewqwe --------------------------- asd;asd


2008-5-29 22:51
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

*代表重复前面字符的0或n次 .代表至少一个字符。 如果是".*\[.*\]" 这样的话,那么也匹配 [] 这样的结果了。即:[]中间没有内容也匹配了。




致精致简!
2008-5-29 22:52
查看资料  发短消息  网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 29 楼』:  

*代表重复前面字符的0或n次 .代表至少一个字符。 如果是".*\[.*\]" 这样的话,那么也匹配 [] 这样的结果了。即:[]中间没有内容也匹配了。
说的很清楚,感谢了。 还有,再劳驾:为什么不在后面再加个 .* 形如:".*\[..*\].*" ,这样和不加有什么区别? 回27楼:25楼的代码符合你的要求 [ Last edited by WANKOILZ on 2008-5-29 at 10:59 PM ]


2008-5-29 22:57
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 30 楼』:  

如果后面再加个 .*,则像[reg]add这样不是以]结尾的行也会匹配,而这样的行不是楼主想的要吧




2008-5-29 23:01
查看资料  发短消息  网志  OICQ (411976538)  编辑帖子  回复  引用回复
<   <<   [1] [2] [3]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: