中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 闲来无事发个电子书玩玩:文本阅读器
作者:
标题: 闲来无事发个电子书玩玩:文本阅读器 上一主题 | 下一主题
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『楼 主』:  闲来无事发个电子书玩玩:文本阅读器



  Quote:
@goto code
支持阅读文件类型:文本文件.
本代码是借鉴加改进,综合而成非原创.
有时间话,plp626会将代码尽量精简,也欢迎大家提出批评以供改进.
http://www.cn-dos.net/forum/view ... ghlight=&page=2

http://www.cn-dos.net/forum/view ... B%E6%97%B6%E9%97%B4

http://www.cn-dos.net/forum/viewthread.php?tid=8905#pid54227
:code
@echo off&cls
set /p txt=(拖进此窗口,开始阅读)
set /p speed=大约每分钟?字[直接回车500字/分钟]
if {%speed%}=={} set/a rate=112&goto start
set /a rate=56200/%speed% &goto start
goto code
:start
mode con cols=127 lines=44&color 80
call :sleep
attrib +h +s sleep.exe&chcp 936&cls
call :f_time_c
set bt=%ft%

rem --------------------------------------------------------------
for /f "delims= eol=" %%i in ('findstr /n .* %txt%') do (
    set "str=%%i"
    call set "str=%%str:"= %%"
    call set "str=%%str:*:=%%"
    call :pickup
)
echo.
goto end
goto :eof

:pickup
if not defined str echo.&goto :eof
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
sleep %rate%
set "str=%str:~1%"
if defined str goto pickup
echo.
goto :eof
rem --------------------------------------------------------------
:end
call :f_time_c
set et=%ft% &call :f_time_sdandard
del /a sleep.exe
echo 用时:%hbet%小时%mbet%分钟%sbet%.%pbet%秒

echo 按任意键over!&pause>nul&exit

rem--------------------- 子函数 -----------------------
:f_time_c
set t=%time%
set t1=%t:~0,1% &&set t2=%t:~1,1% &&set t3=%t:~3,1% &&set t4=%t:~4,1%
set t5=%t:~6,1% &&set t6=%t:~7,1% &&set t7=%t:~9,1% &&set t8=%t:~10,1%
set /a ft=3600000*%t1%+360000*%t2%+60000*%t3%+6000*%t4%+1000*%t5%+100*%t6%+10*%t7%+%t8%
goto :eof
:f_time_sdandard
set /a bet=%et%-%bt%
set /a hbet=%bet%/360000
set /a mbet=(%bet%-360000*%hbet%)/6000  
set /a sbet=(%bet%-360000*%hbet%-6000*%mbet%)/100
set /a pbet=%bet%-360000*%hbet%-6000*%mbet%-100*%sbet%
goto :eof
:sleep
echo q | debug>nul
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sleep.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sleep.com
echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?>>sleep.com
echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>sleep.com
echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep.com
echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>sleep.com
echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.com
echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep.com
echo dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>sleep.com
echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>sleep.com
echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH>>sleep.com
echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>sleep.com
echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x>>sleep.com
sleep.com>sleep.exe&del sleep.com
goto :eof

写了这么多系统竟然还说字数不够,真是晕了,在此添些废话充数.

───────────────── 版务记录 ─────────────────
执行:HAT
操作:在帖子标题中增加搜索关键字;代码加code标签
说明:原标题"【闲来无事】发个电子书玩玩"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-9-27 at 09:04 ]

2008-1-15 14:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
haiou327
高级用户

DOS时空


积分 713
发帖 348
注册 2007-2-10
状态 离线
『第 2 楼』:  

引用人家的,所以………………………………



欢迎进入我的网盘!!!
2008-1-15 14:59
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (52688226)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 3 楼』:  


@goto code
::精简一下
:code
@echo off&chcp 936&cls
set /p txt=(拖进此窗口,开始阅读)
set /p speed=大约每分钟?字[直接回车500字/分钟]
if {%speed%}=={} set/a rate=112&goto start
set /a rate=56200/%speed% &goto start
goto code

:start
::下面两句不可颠倒
call :sleep
chcp 936&cls

call :f_timec "0"
mode con cols=60 lines=38&color 80

for /f "delims= eol=" %%i in ('findstr /n .* %txt%') do (
    set "str=%%i"
    call set "str=%%str:"= %%"
    call set "str=%%str:*:=%%"
    call :pickup
)
goto end

:pickup
if not defined str echo.&goto :eof
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
%tmp%\sleep %rate%
set "str=%str:~1%"
if defined str goto pickup
goto :eof

:end
call :f_timec "1"
echo 用时%ht%小时%mt%分钟%st%.%pt%秒
echo 按任意键over!&pause>nul&exit

rem ------- 子函数 --------
:f_timec
set "t=%time%"
if "%t:~0,1%"==" " (set/a t1=0) else set/a t1=%t:~0,1%
set/a t2=%t:~1,1%,t3=%t:~3,1%,t4=%t:~4,1%,t5=%t:~6,1%,t6=%t:~7,1%,t7=%t:~9,1%,t8=%t:~-1%
set/a ft=3600000*%t1%+360000*%t2%+60000*%t3%+6000*%t4%+1000*%t5%+100*%t6%+10*%t7%+%t8%
if %1=="0" (set bt=%ft%) else (set et=%ft%&call :f_timec_s)
goto :eof
:f_timec_s
if %et% lss %bt% set/a et=%bt%+8640000
set/a ct=%et%-%bt%
set/a ht=%ct%/360000
set/a mt=(%ct%-360000*%ht%)/6000
set/a st=(%ct%-360000*%ht%-6000*%mt%)/100
set/a pt=%ct%-360000*%ht%-6000*%mt%-100*%st%
goto :eof
:sleep
cd.>%tmp%\sleep.com
(echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6
echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?
echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz
echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk
echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=
echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R
echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?
echo dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM
echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT
echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH
echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G
echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x)>>%tmp%\sleep.com
%tmp%\sleep.com>%tmp%\sleep.exe&del %tmp%\sleep.com
goto :eof


2008-1-27 02:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
AlexZhang
系统支持





积分 952
发帖 410
注册 2007-2-8
状态 离线
『第 4 楼』:  

用了个小程序。。。

2008-1-27 16:19
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 5 楼』:  

1楼代码运行正常

3楼代码在我这运行出错 见图



[ Last edited by suntb on 2008-1-27 at 09:48 PM ]

2008-1-27 21:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 6 楼』:  

把 echo q | debug>nul
加到cd.>%tmp%\sleep.com句的下面再试试,

2008-1-28 11:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 7 楼』:  


:: TxtRead.cmd (文本阅读程序)
:: 原创: plp626@cn-dos.net 2008-1-15
:: 修改: qzwqzw@cn-dos.net 2008-1-28
:: 来源: http://www.cn-dos.net/forum/viewthread.php?tid=37072
:: 说明: 原代码为了功能牺牲了简洁,在此做了简化
@echo off
set docu=%~sf0
set speed=50
set color=80
set /p "docu=指定阅读文档(可直接将文件拖进此窗口,缺省为本程序代码): "
set /p "speed=指定阅读速度(0最快,数越大越慢,缺省50): "
set /p "color=指定阅读颜色(具体参考color/?,缺省80灰底黑字): "
color %color%

echo ----------------------------------------------------------------------
for /f "delims= eol=" %%i in ('findstr /n .* %docu%') do (
    set "str=%%i"
    call set "str=%%str:"="%%"
    call set "str=%%str:*:=%%"
    call :pickup
)
echo ----------------------------------------------------------------------
pause>nul&exit /b

:pickup
if not defined str echo.&goto :eof
if "%str:~0,1%"=="=" set "str==%str:~1%"
set /p "=%str:~0,1%"<nul
for /l %%i in (1,1,%speed%00) do set _tmp=%%i
set "str=%str:~1%"
goto pickup
[ Last edited by qzwqzw on 2008-1-28 at 02:07 PM ]

2008-1-28 14:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 8 楼』:  

呵呵,我这个不能叫原创的,是东拼西凑的东西,几乎没有技术含量.
不过还是谢谢qzwqzw.给了我鼓励!

2008-1-28 14:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 9 楼』:  

只要构思和创意上属于原创
就应该算是原创代码

至于代码
在考虑是否加入鼠标点击暂停的功能
这个需要改一个注册表键值
还不确定是否有这个必要

2008-1-28 14:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 10 楼』:  

ctrl+C就可以暂停,光标处会提示要终止吗?(Y/N),输入N后会继续阅读.
我忘了写这个提示.
我下来有时间想加入"阅读标签的代码"的代码,总不能让人家一口气读完一本红楼梦吧,(txt格式的,大小有1.6M)
就算每分种1000字的速度也得30多小时.

2008-1-28 14:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 11 楼』:  

我说的是单击鼠标左键暂停,右键继续
Ctrl+C这个东西用户体验太差了

2008-1-28 15:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 12 楼』:  

这个cmd下都能实现吗?很期待呀

2008-1-28 16:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 13 楼』:  


:: TxtRead.cmd (文本阅读程序)
:: 原创: plp626@cn-dos.net 2008-1-15
:: 修改: V2 - qzwqzw@cn-dos.net 2008-1-28
:: 来源: http://www.cn-dos.net/forum/viewthread.php?tid=37072
:: 说明: 原代码为了功能牺牲了简洁,在此做了简化
:: 更新: 增加了鼠标左键暂停和右键继续功能
::       增加逐行阅读模式
::       增加阅读宽度指定
@echo off & setlocal
if not "%title%"=="" shift /1 & goto :Read
set title=批处理文本阅读程序(单击鼠标左键暂停,右键继续)
reg add HKCU\Console\%title% /v QuickEdit /t reg_dword /d 1 /f>nul
set docu=%~sf0
set unit=0
set speed=10
set color=80
set width=120
set /p "docu=指定阅读文档(可直接将文件拖进此窗口,缺省为本程序代码): "
set /p "speed=指定阅读速度(0最快,指定数字越大越慢,缺省%speed%): "
set /p "color=指定阅读颜色(颜色值参考color/?,缺省为%color%-灰底黑字): "
set /p "unit=指定阅读模式(逐行阅读为0,逐字阅读为1, 缺省为%unit%-逐行): "
set /p "width=指定阅读宽度(最小为15,缺省为%width%): "
if "%unit%"=="1" (set ReadMode=CharMode) else set ReadMode=LineMode
start /max "%title%" %~sf0
goto :eof

:Read
mode con cols=%width%
color %color%
for /f "delims= eol=" %%i in ('findstr /n .* %docu%') do (
    set "buffer=%%i"
    call set "buffer=%%buffer:*:=%%"
    call :%ReadMode%
)
pause>nul&exit

:LineMode
setlocal EnableDelayedExpansion
echo.!buffer!
endlocal
for /l %%i in (1,1,%speed%0000) do set _tmp=%%i
goto :eof

:CharMode
call set "buffer=%%buffer:"="%%"
:CharLoop
if not defined buffer echo.&goto :eof
if "%buffer:~0,1%"=="=" set "buffer==%buffer:~1%"
set /p "=%buffer:~0,1%"<nul
for /l %%i in (1,1,%speed%000) do set _tmp=%%i
set "buffer=%buffer:~1%"
goto :CharLoop
[ Last edited by qzwqzw on 2008-1-28 at 05:47 PM ]

   此帖被 +4 点积分        点击查看详情   
评分人:【 plp626 分数: +4  时间:2008-1-29 14:55


2008-1-28 17:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 14 楼』:  



  Quote:
reg add HKCU\Console\%title% /v QuickEdit /t reg_dword /d 1 /f>nul

你动作真快!加分.

2008-1-28 18:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 15 楼』:  

小改一下
:: TextRead.cmd (文本阅读程序)
:: 原创: plp626@cn-dos.net 2008-1-15
:: 来源: http://www.cn-dos.net/forum/viewthread.php?tid=37072
:: 说明: 原代码为了功能牺牲了简洁,在此做了简化
:: 更新:
::  V2.6 - qzwqzw - 2008-1-28
::      修正含空格路径问题
::  V2.5 - qzwqzw - 2008-1-28
::      修改配置参数指定方式
::      增加阅读高度指定
::      修改Read会话中的标题显示方式
::      调整程序初始化参数
::      修正2.0~2.1的空行显示问题
::  V2.1 - qzwqzw - 2008-1-28
::      修正注册表项未完整删除的问题
::  V2.0 - qzwqzw - 2008-1-28
::      增加了鼠标左键暂停和右键继续功能
::      增加逐行阅读模式
::      增加阅读宽度指定
::  v1.5 - qzwqzw - 2008-1-28
::      精简代码
::      修正空行的输出问题
::

@echo off & setlocal
if not "%prog%"=="" shift /1 & goto :Read
set prog=批处理文本阅读程序
set docu="%~0"
set mode=1
set speed=5
set color=80
set width=128
set height=44

:Config
cls
echo.
echo 当前配置:
echo    阅读文档: %docu%
echo    速度:%speed%   颜色:%color%    模式:%mode%  窗口大小:%width% X %height%
echo.
echo 配置说明:
echo    文档指定: 输入文件路径(可直接将文件拖进此窗口)
echo    速度设定: speed=速度值(0最快,指定数字越大越慢)
echo    颜色设定: color=颜色值(参考color/?)
echo    模式设定: mode=模式值(逐行阅读为0,逐字阅读为1):
echo    宽度指定: width=宽度值(最小为15):
echo    宽度指定: height=高度值(最小为1):
echo.
set config=
set /p "config=请输入配置命令(直接回车取当前配置): "
if not defined config goto :Run
set "config=%config:"=%"
if exist "%config%" set docu="%config%"
set %config%
goto :Config

:Run
if "%mode%"=="1" (set mode=CharMode) else set mode=LineMode
reg add HKCU\Console\%prog% /v QuickEdit /t reg_dword /d 1 /f>nul
start /max "%prog%" %0
reg delete HKCU\Console\%prog% /f>nul
goto :eof

:Read
title 正在阅读 %docu%... [单击鼠标左键暂停,右键继续] - %prog%
mode con cols=%width% lines=%height%
color %color%
for /f "delims= eol=" %%i in ('findstr /n .* %docu%') do (
    set "buffer=%%i"
    call set "buffer=%%buffer:*:=%%"
    call :%mode%
)
title 完成阅读 %docu% ! [按任意键键结束] - %prog%
pause>nul&exit

:LineMode
setlocal EnableDelayedExpansion
echo.!buffer!
endlocal
for /l %%i in (1,1,%speed%0000) do set _tmp=%%i
goto :eof

:CharMode
if defined buffer call set "buffer=%%buffer:"="%%"
:CharLoop
if not defined buffer echo.&goto :eof
if "%buffer:~0,1%"=="=" set "buffer==%buffer:~1%"
set /p "=%buffer:~0,1%"<nul
for /l %%i in (1,1,%speed%000) do set _tmp=%%i
set "buffer=%buffer:~1%"
goto :CharLoop
[ Last edited by qzwqzw on 2008-1-28 at 10:32 PM ]

2008-1-28 19:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: