|
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
状态 离线
|
|
2008-1-15 14:59 |
|
|
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
状态 离线
|
|
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
状态 离线
|
|
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 |
|