中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 出题:整理文本 (新手老鸟都来试试)
« [1] [2] [3] [4] »
作者:
标题: 出题:整理文本 (新手老鸟都来试试) 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  出题:整理文本 (新手老鸟都来试试)

要求:把 a.txt 整理成按句号换行,
  即:把没有句号的行和下行拼接,把有句号的行从句号处换行
  注意:有可能连续几行都没有句号,也可能一行中有多个句号。
  不用考虑特殊字符问题。
  当然前提是不能把a.txt所有内容都拼接为一个变量。(因为变量的字符数是有限制的)
  看谁的代码最简洁、高效、加分。。!

a.txt 内容如下:
批处理文件(Batch File,简称 BAT文件)是一种在DOS
下最常用的可执行文件。它具有灵活的操纵性,可适应各
种复杂的计算机操作。所谓的批处理,就是按规定的顺序
自动执行若干个指定的DOS命令或程序。
即是把原来一个一个执行的命令汇总起来,成批的执行,而程序文件可
以移植到其它电脑中运行,因此可以大大节省命令反复输
入的繁琐。同时批处理文件还有一些编程的特点
。可以通过扩展参数来灵活的控制程序的执行,所以在日
常工作中非常实用。批处理。bat。cmd。尺有所短。寸有所长。
要求输出如下格式:
批处理文件(Batch File,简称 BAT文件)是一种在DOS 下最常用的可执行文件。

它具有灵活的操纵性,可适应各种复杂的计算机操作。

所谓的批处理,就是按规定的顺序自动执行若干个指定的DOS命令或程序。

即是把一个一个执行的命令汇总起来成批的执行,而程序文件可以移植到其它电脑中运行,因此可以大大节省命令反复输入的繁琐。

同时批处理文件还有一些编程的特点。

可以通过扩展参数来灵活的控制程序的执行,所以在日常工作中非常实用。

批处理。

bat。

cmd。

尺有所短。

寸有所长。
总结一下:
答案众多,(2楼 14楼 17楼 19楼)
2楼采取逐字读取的办法,且可以处理大多数特殊字符,但效率太低。
14楼创建一个com文件、效率高的惊人。可惜我不懂、倒是长了见识。不过此题目的还是用纯p来解决。
17楼、19楼思路一样、代码略有不同,效率也不错、基本符合楼主要求。


[ Last edited by 26933062 on 2008-7-13 at 10:55 PM ]



致精致简!
2008-7-13 19:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 2 楼』:  

逐字读取
@echo off
for /f "delims=" %%i in ('findstr /n .* 1.txt') do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    set str=!str:*:=!
    call :lp
    endlocal
)
pause&exit
:lp
if defined str (
    set /p= !str:~0,1!<nul
    if "!str:~0,1!"=="。" echo.
    set str=!str:~1!
    goto lp
)
不考虑特殊字符 也可以简化下
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do set str=%%i&call :lp
pause&exit
:lp
    set /p= !str:~0,1!<nul
    if "!str:~,1!"=="。" echo.
    set str=!str:~1!
    if defined str goto lp
[ Last edited by terse on 2008-7-13 at 08:23 PM ]

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




简单!简单!再简单!
2008-7-13 20:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

逐字读取不失为一个办法,但效率就大打折扣了。
加 5 分。



致精致简!
2008-7-13 20:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

我想法把。换成echo.   可以吗



简单!简单!再简单!
2008-7-13 20:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  要是用vbs就easy了……bat字符处理就看大家啦

即是把原来一个一个执行的命令汇总起来,成批的执行,而程序文件可
以移植到其它电脑中运行,因此可以大大节省命令反复输
入的繁琐。



即是把原来一个一个执行的命令汇总起来,成批的执行,而程序文件可以移植到其它电脑中
运行,因此可以大大节省命令反复输入的繁琐。



这个的断句又是如何决定的呢?



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-7-13 20:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 6 楼』:  


setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (text.txt) do (
set str=%%i
set/p=!str!<nul>>temp.txt)
for /f "delims=。" %%i in (temp.txt) do (echo %%i。&echo.)>>result.txt
可惜事与愿违, 最后的结果只有一行,高手帮我修改下。思路我认为是对的。



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-13 20:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

老土兄有没有研究过文本文件一行最多容纳多少个字符?超过这个极限,你的思路还正确吗?



2008-7-13 21:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

回 5 楼
即是把原来一个一个执行的命令汇总起来,成批的执行,而程序文件可以移植到其它电脑中运行,因此可以大大节省命令反复输入的繁琐。
这里中间没有句号,当然要算一句了。



致精致简!
2008-7-13 21:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 9 楼』:  

这样可以吗。。。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do set str=!str!%%a
set str=%str:。=。^&echo.^&echo.%
echo %str%
pause>nul


不好意思,忘记详细看题了。。。

[ Last edited by pusofalse on 2008-7-13 at 09:56 PM ]



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-13 21:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

那就是排版的问题?我就是不明白为什么在中字断开。。。


如果是vbs的话:replace "回车"为"空",replace "。"为 "。+回车"



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-7-13 21:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  to 9楼

楼主不允许这样做啊,呵呵。



2008-7-13 21:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 12 楼』:  

Unix下这样写应该可以成功,但Windows下就是不行,思考中。。。
sed "s/。/。\n/g" a.txt | sed "/。$/!s/\n//g"




2008-7-13 21:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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



  Quote:
Originally posted by slore at 2008-7-13 21:54:
那就是排版的问题?我就是不明白为什么在中字断开。。。


如果是vbs的话:replace "回车"为"空",replace "。"为 "。+回车"

并没有在“中”字断开,是论坛自动给它换行了。
所以我的样本中都是用空行代表换行的。这样说明白了么?



致精致简!
2008-7-13 21:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


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

换个思路
@echo off
chcp 437 >nul & graftabl 936 >nul
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sbs2.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sbs2.com
echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>>sbs2.com
echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>>sbs2.com
echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>>sbs2.com
echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>>sbs2.com
echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>>sbs2.com
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>>sbs2.com
echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>>sbs2.com
echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>>sbs2.com
echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>>sbs2.com
sbs2.com>nul
sbs2.com 0 "$0d$0a" "" < a.txt > tmp.txt
sbs2.com 0 "。" "。$0d$0a$0d$0a" < tmp.txt > out.txt
del tmp.txt
del sbs2.com


   此帖被 +15 点积分         点击查看详情   
评分人:【 26933062 分数: +15  时间:2008-7-13 22:15


2008-7-13 22:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 15 楼』:  ;回10楼

我觉得可能是记事本的BUG,有时用的好好的,关闭再打开时记事本就会出现中间断开的情况。



┌───────┐
├→学习→实践→┤
└───────┘
2008-7-13 22:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: