标题: [游戏娱乐] 批处理文本阅读器 [打印本页]
作者: zhouyongjun 时间: 2009-6-5 13:53 标题: 批处理文本阅读器
在论坛混了这么久,第一次在原创板块发帖,而且代码跟高手们的比起来还真是汗颜,可真是进步缓慢啊。来批处理之家前只是在百度上对一些简单命令有一点点了解,刚进来什么都不懂。在这里我要感谢batman,可以说是他引我入门的,他跟我一样不是学计算机的,但是我很佩服他的技术。那时候天天缠着他问问题,耽误了他不少时间。
之前也写过一些自认为实用性的东西,但是总感觉写的太差劲,不敢贴出来,有时工作忙也没心思去弄。贴这个代码出来主要希望大家指点几个问题:
1.for /f处,我是call调用:loop对每行进行处理,但是这样会发现文章很长时到后面速度会变慢很多。开始我把loop段嵌套到for里面通过goto跳转,但是for处理完一行就会跳出循环。不知道有什么好的解决办法不?
测试代码:-
- @echo off
- for /f "%_skip% delims=" %%i in ('findstr /n ".*" 1.txt') do (
- set "var=%%i"&set/a line+=1
- setlocal enabledelayedexpansion
- title 第!line!段(右击暂停,CTRL+C停止)
- set "var=!var:*:=!"
- :loop
- set/a n+=1&set "str1=!str!"
- call,set "str=%%var:~0,!n!%%"
- if "!str!" equ "!str1!" goto next
- set/p=!str!<nul
- if !n! equ 25 set/a n=0&set "var=!var:~25!"&echo\&echo\
- if not defined var goto next
- for /l %%a in (1,1,50) do set/p=<nul
- for /l %%b in (1,1,100) do ver>nul
- goto loop
- :next
- echo\&echo\&endlocal
- )
- pause
复制代码
2.还存在部分特殊字符的组合不能正确显示
3.我想产生一个ini配置文件,规定一个格式来将文件添加到列表,记录历史记录(阅读到的行数、速度、位置等信息),方案想到了,但是会对配置文件反复进行写入操作(每行一次),不知会不会硬盘损耗厉害。
下面是我的代码:-
- @echo off
- title 文本阅读器(右击暂停,CTRL+C停止)
- color 1f&mode con cols=50 lines=30
- echo.&echo.&echo.&echo.
- set/p file= 请把要阅读的文本拖入窗口:
- echo.&set/p m= 开始阅读位置*段(直接回车默认从头开始):
- if defined m (set/a m-=1&call,set "_skip=skip=%%m%%")
- echo.&set/p speed= 速度(直接回车默认速度为100;数值越小速度越快):
- if not defined speed set speed=100
- cls&set "line=%m%"
- for /f "%_skip% delims=" %%i in ('findstr /n ".*" %file%') do (
- set "var=%%i"&set/a line+=1
- setlocal enabledelayedexpansion
- title 第!line!段(右击暂停,CTRL+C停止)
- set "var=!var:*:=!"
- if defined var call :loop
- echo\&echo\&endlocal
- )
- echo\&echo 本文完!!!
- ping /n 3 127.1 >nul
- exit
- :loop
- set/a n+=1&set "str1=!str!"
- call,set "str=%%var:~0,!n!%%"
- if "!str!" equ "!str1!" goto :eof
- set/p=!str!<nul
- if !n! equ 25 set/a n=0&set "var=!var:~25!"&echo\&echo\
- if not defined var goto :eof
- for /l %%a in (1,1,50) do set/p=<nul
- for /l %%b in (1,1,%speed%) do ver>nul
- goto loop
复制代码
作者: 随风 时间: 2009-6-5 14:52
说说你的第一个代码
论坛早有讨论过,在for内部使用标签是一种不“健康”的代码,真正设计合理的代码是不需要在for内部使用标签的,而且测试你的代码只能循环1.txt的第一行,应该也是标签导致的吧?
call 在for中使用会很影响代码效率,具体的搜索下论坛有关“效率”方面的帖子,里面的讨论应该对你有所帮助。
另:你的代码应该可以不用call和goto来完成的。(只是猜想,未测试 ^_^)
参考下这个帖的12楼
http://www.bathome.net/viewthrea ... p;extra=&page=1
作者: batman 时间: 2009-6-5 19:08 标题: 以前在cn-dos写的:
- @echo off&color 9f&mode con lines=15
- title txt/bat文件阅读器
- cls
- echo.&echo.&echo.&echo.&echo.
- echo txt\bat文件阅读器
- ping /n 2 127.1 >nul
- cls
- color 90
- echo.&echo.&echo.&echo.&echo.
- echo THE CODE IS FOR NAMEJM AND MADE BY ZW19750516
- ping /n 4 127.1 >nul&color 9f
- :begin
- cls
- echo.&echo.&echo.&echo.&echo.
- set a=1
- set /p a=请将要阅读的txt或bat文件拖放到这里:
- cls
- echo.&echo.&echo.&echo.&echo.
- if "%a%"=="1" echo 没有发现要阅读的文件,请返回正确操作。&ping /n 3 127.1 >nul&goto begin
- cls
- for /f "delims=" %%i in ('findstr /n .* "%a%"') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set str=!str:*:=!
- call :pickup
- endlocal
- )
- cls
- echo.&echo.&echo.&echo.&echo.
- echo 阅读完毕,请按任意键退出。
- pause >nul
- goto :eof
- :pickup
- ping -n 1 127.1>nul
- if defined str (
- set /p= !str:~0,1!<nul
- set str=!str:~1!
- goto pickup
- )
- echo.
复制代码
作者: zhouyongjun 时间: 2009-6-5 19:54
batman后面输出部分我以前也常用,到这里我怎么使用这个笨办法了,看来是钻进死胡同不知变通了。
我那样效率确实低了很多,还要考虑每行字符数。
作者: zhouyongjun 时间: 2009-6-5 20:44
set /p= !str:~0,1!<nul
前面留个空格又给退回去,这不多此一举吗,难道有什么特殊用途?
set /p=!str:~0,1!<nul,直接这样没发现什么不可以啊。。。
作者: batman 时间: 2009-6-5 23:37
set /p= !str:~0,1!<nul是为了处理"="字符,汗,自己都忘记了,幸亏jm提醒。
作者: zhouyongjun 时间: 2009-6-5 23:43 标题: 回复 6楼 的帖子
谢谢,我拿那个特殊符号集测试了下,没有空格加退格键会出错。
作者: jianrendubu 时间: 2009-6-6 18:29
还不错哦,不过还是有很多的不足--加油啊——————
作者: PakTC 时间: 2009-6-8 13:36
回想到以前的一个 搞笑开机,是利用vbs的stdout(好像是)在cmd上输出的
优点:延时准确,占用系统资源不高,不怕特殊字符。
又因为cmd方便的窗口,所以非常期待一个vbs混合bat做的文本阅读器
建议用bat 读取当前目录的文本,赋予编号,然后给出菜单
供读者挑选,这样就更方便了。
作者: zljzsmzzx 时间: 2009-6-10 13:21
学习了。。。。。。。。。。。
作者: ynkm0871 时间: 2009-7-4 09:13
下来学习一下,很好的呢!
作者: mayaju 时间: 2009-7-5 20:18
xuexile
hhhhhh
作者: styledream 时间: 2009-8-21 23:29
很有用的东西~~~
值得学习~~~
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |