中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]批处理分割文本文件如何又快又好
作者:
标题: [求助]批处理分割文本文件如何又快又好 上一主题 | 下一主题
singlion
初级用户





积分 25
发帖 12
注册 2007-10-26
状态 离线
『楼 主』:  [求助]批处理分割文本文件如何又快又好

我经常用MP4看小说,但是从网上下载的小说往往都很大,多达4M,用MP4打开时会非常慢,不知道的人还以为是死机。
所以我就想弄个文本分割程序。
我的思路是,因为不太容易按文件大小分割,所以就想到按行数分割,当然直接用for,但是保存时有两种方法:一是每一行保存一次,行数到达指定值时更换文件名;二是先读取足够的行数,放入一个变量里面,然后一下就保存了。
两种方法各有优点各有缺点。
前者,处理速度极慢,如果设置100行分成一个文件,一般每个文件需要10秒多才能写完。
后者,速度倒是快点,但是分割后的文件用记事本打开时,所有的回车符都显示成黑块,在其他文本编辑程序(如写字板、Word)中能正常打开。

希望高手帮忙给出一个最佳方案。


我的代码如下:
@echo off
cls & color 79
setlocal enabledelayedexpansion

:inputfilename
set /p txtfile=请输入要分割的文件位置及文件名:
if not defined txtfile goto :inputfilename

set /p lines=请输入每多少行分割为一个文件(请输入50到300之间的数):
if not defined lines set /a lines=100

cls
set /a line=0
set /a files=1
set filename=第!files!部分.txt
mode con lines=2
echo 正在写第1个文件...
set str=
for /f "delims=" %%i in (%txtfile%) do (
set /a line+=1
set str=!str!%%i
if "!line!"=="!lines!" (
echo !str!>!filename!
cls
set /a line=0
set /a files+=1
set filename=第!files!部分.txt
echo 正在写第!files!个文件...
set str=
)
)
echo !str!>!filename!
cls
echo 完成。按任意键退出程序...
pause>nul
del c:\tmp
[ Last edited by singlion on 2008-12-6 at 21:52 ]

2008-12-6 21:16
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (417493818)  编辑帖子  回复  引用回复
HAT
版主





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

将文本文件分割成指定大小
http://bbs.bathome.cn/viewthread.php?tid=2104

Q: 为方便他人复制,如何给代码加code标签?
A: http://www.cn-dos.net/forum/viewthread.php?tid=43735#pid304733
参考:http://www.cn-dos.net/forum/faq.php?page=misc#1



2008-12-6 21:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
singlion
初级用户





积分 25
发帖 12
注册 2007-10-26
状态 离线
『第 3 楼』:  

可是那些代码执行好慢啊!还不如我的块。

另:我不要求每个文件以什么字符结尾

2008-12-6 21:52
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (417493818)  编辑帖子  回复  引用回复

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


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



论坛跳转: