标题: [已结]逐行逐字阅读文本的批处理,请高手帮忙完善
[打印本页]
作者: ccwan
时间: 2006-11-19 21:44
标题: [已结]逐行逐字阅读文本的批处理,请高手帮忙完善
─────────── 版主提示 ───────────
21楼 namejm 所写代码是完美解决方案
─────────── 版主提示 ───────────
我做了一个批处理,让它读取文本文件的内容,逐行逐字显示,但我水平太低,无法使它完全按照原文本的格式显示,请高手帮忙。谢谢!
[
Last edited by bjsh on 2007-8-10 at 08:35 AM ]
作者: ccwan
时间: 2006-11-19 22:57
自己顶一下!
作者: redtek
时间: 2006-11-19 23:23
每次读一行,但你并没有显示完一行后让它换新行的代码~:)
所以全连着显示了~:)
也就是说,你读取了一行文本内容后,
然后分解了这个变量,以便再逐字的显示在屏幕上(白底背景很漂亮~:),
但是,你如何知道你取的那一行显示完了?(知道那一行显示完了就可以再打一个换行符了)。
所以,是不是要主动的取完一行以后在这个变量的最后再加一个“标置结束“的符号以方便判断呢?
如果有一个 if 判断是否此行到了结尾,如果是打一个换行符 echo.
这样的方法在下面贴子的第8楼有示例~:)
详见: [原创]无奈何签名代码略析
http://www.cn-dos.net/forum/viewthread.php?tid=18838&fpage=1
上面贴子从读文本内容到显示特殊符号的例子都已经非常全面啦~:)
[
Last edited by redtek on 2006-11-19 at 10:27 AM ]
作者: ccwan
时间: 2006-11-19 23:26
谢谢!正是看了后,才有此想法,试着玩儿的。主要是没有完全消化吸收啊!
[
Last edited by ccwan on 2006-11-19 at 11:36 PM ]
作者: vkill
时间: 2006-11-20 07:03
呵呵~我喜欢先sed -n 1p 读取行再啄字读取
作者: lxmxn
时间: 2006-11-20 07:53
刚下午写的,因为不支持特殊字符的读取,所以没敢发上来。看见兄弟发这帖子,才发上来,各位高手见笑了。
把要读的文件拖放到 ReadTxt.BAT 文件上释放即可。
::_______________________ReadTxt.BAT_______________________
@echo off&setlocal ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=" %%A IN ('type %1') DO (CALL;:__;"%%A")
endlocal&PAUSE&goto :EOF
::显示字符子函数————————————-
:__
SET A="%1"
SET B=0
if "%A%"=="" goto end
:BEGIN
IF NOT "!A:~%B%,1!"=="" (
SET/P=!A:~%B%,1!<NUL
PING 127.1 -N 1 >NUL
SET/A B+=1
GOTO BEGIN
) else (
:end
echo/&echo\
)
::_______________________ReadTxt.BAT_______________________
作者: chainliq
时间: 2006-11-20 08:07
呵呵,我倒是觉得这个挺有意思的,请问如何修个它的显示速度呢?
作者: vkill
时间: 2006-11-20 08:09
要 echo ,所以特殊字符这个不好处理
作者: redtek
时间: 2006-11-20 10:06
顶~~lxmxn兄的动画阅读很精彩,可以看小说啦~:)
作者: ccwan
时间: 2006-11-20 21:01
lxmxn兄确实厉害!佩服并感谢。
这正是我想要得效果,多谢兄的代码!
看看能不能解决特殊字符问题。
[
Last edited by ccwan on 2006-11-21 at 12:30 AM ]
作者: hxuan999
时间: 2006-11-23 07:49
看小说?真是个好主意,正好哪个高手用批处理也做个电子阅读器吧.
作者: redtek
时间: 2006-11-23 08:46
在PSP游戏机上看电子书多爽啊~:)
[
Last edited by redtek on 2006-11-22 at 10:31 PM ]
作者: scriptor
时间: 2007-1-12 12:38
好东西啊
有解决我的一个问题了
谢谢了
作者: stormback
时间: 2007-1-19 05:08
好东西
作者: liuxin31554155
时间: 2007-1-19 05:47
不错的东东~
作者: lxmxn
时间: 2007-1-19 05:56
Quote: |
Originally posted by chainliq at 2006-11-19 19:07:
呵呵,我倒是觉得这个挺有意思的,请问如何修个它的显示速度呢? |
|
修改它的显示速度可以更改代码中的 ping 语句,可以增加参数-n的值,也可以增加超时参数-w的值,个人而定。
作者: liuxin31554155
时间: 2007-1-19 06:14
好东西 下来测试下
作者: namejm
时间: 2007-2-3 00:03
lxmxn『第 6 楼』的代码挺不错的,但是有以下缺憾:
1、因为启用了变量延迟功能,所以,会把文本中的感叹号置换为空;
2、因为普通for语句忽略以分号打头的行,所以此代码将不能提取这些行的内容;
3、if 语句中的 :end 并不能被其他语句作为标签来调用,也就是说,其他语句中的goto end部分执行的时候会出错,并不能跳转到这里;
4、SET A="%1" 中的引号是多余的,因为在call的时候,%1已经被强行赋予了引号,因此会导致 if "%A%"=="" goto end 一句始终得不到执行;
在这个代码的基础上,得到如下代码:
版本一:
@echo off
:: 把半角双引号换成空格,把等号换成〓,兼容其他特殊字符
:: 能处理以分号打头的行,但是会忽略空行
:: 能兼容unicode格式的文本
:: 每行之间空一行显示
for /f "delims= eol=" %%i in ('type %1') do (
set "str=%%i"
call set "str=%%str:"= %%"
call :pickup
)
pause
goto :eof
:pickup
ping -n 1 127.1>nul
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
set "str=%str:~1%"
if defined str goto pickup
echo.&echo.
goto :eof
版本二:
@echo off
:: 与版本一的几点区别:
:: 1、不能处理unicode文本
:: 2、每行之间不再强行加上空行,并且能原样显示空行
for /f "delims= eol=" %%i in ('findstr /n .* %1') do (
set "str=%%i"
call set "str=%%str:"= %%"
call set "str=%%str:*:=%%"
call :pickup
)
echo.
pause
goto :eof
:pickup
if not defined str echo.&goto :eof
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
ping -n 1 127.1>nul
set "str=%str:~1%"
if defined str goto pickup
echo.
goto :eof
[
Last edited by namejm on 2007-2-2 at 02:06 PM ]
作者: anqing
时间: 2007-2-3 00:20
太精彩了,lx和jm全是高人
作者: flandy
时间: 2007-5-1 23:06
顶,支持
作者: namejm
时间: 2007-5-30 11:30
根据
[讨论]最大限度原样输出含特殊字符的指定行内容 这个帖子的讨论成果,得到如下代码,能完美解决特殊字符的原样显示问题,发出来大家测试一下:
@echo off
:: 逐行逐字阅读文本,并且原样显示文本内容
:: ① 为了显示文本的所有内容,使用了for+findstr的句式
:: ② 为了能原样显示文本,使用变量延迟并在合适的位置终止延迟
:: ③ 为了能正确显示引号和等号,在语句 set /p= !str:~0,1!<nul 中,等号后空一格,并使用退格键
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
call :pickup
endlocal
)
pause
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.
goto :eof
作者: qq43142691
时间: 2007-5-30 18:47
呵呵...个个都是牛人来D....偶也要努力学习ing
作者: moniuming
时间: 2008-1-7 15:54
退格键要怎么输入,谁能告诉我啊,谢谢!
作者: newaifi
时间: 2008-1-8 13:51
收藏了。。果然经典
作者: kaikai163
时间: 2008-1-8 14:31
听了版主的提示,直接到21楼,测试,牛人一个!
作者: flyfox1047
时间: 2008-1-30 20:14
都是高手呀!帮顶一个!
作者: yuehong
时间: 2008-3-5 17:46
都是高手呀!学习下。。。
作者: bbcn
时间: 2008-3-5 23:16
还真是不错啊!
作者: yk520
时间: 2008-3-20 22:29
可以啊
作者: AhKang
时间: 2008-3-31 07:07
高人,我等佩服得五体投地。收藏了……
作者: stance
时间: 2008-4-21 17:23
學習一下
作者: rzwwj1
时间: 2008-4-24 18:19
收藏了……