找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: yylogo

[文件操作] [已解决]批处理怎样按指定大小分割txt文档?

[复制链接]
发表于 2008-10-8 22:55:43 | 显示全部楼层
你把要处理的文件和批处理放在同一个文件夹里试试
 楼主| 发表于 2008-10-8 23:13:58 | 显示全部楼层
问题出在这,程序不能自己建立一个与文件同名的文件夹,需要手动建立,再测试,就有效果了,而且有了标点符号做最后的结尾,看到了,不过是人为添加的标点符号。。。
谢谢了。
发表于 2008-10-9 02:03:58 | 显示全部楼层
也来一个
利用forstr /o 不知道forstr 能处理多大的文件
效率是问题  呵呵  凑个热闹
  1. @echo off&setlocal enabledelayedexpansion
  2.      set/a kb+=102400,x+=1
  3.      set/p file=请把要处理的文件拖到此处:
  4.      set file=%file:"=%
  5.      call:lp "%file%"
  6.      pause&exit
  7. :lp
  8. md "%~n1"
  9. for /f "tokens=1* delims=:" %%i in ('findstr /o ".*" "%file%"') do (
  10.      if %%i gtr !kb! set /a kb+=102400,x+=1
  11.      >>"%~n1\%~n1_!x!%~x1" echo.%%j
  12. )
复制代码
 楼主| 发表于 2008-10-9 09:36:41 | 显示全部楼层
18楼的,我不得不说
姚明啊,高,你实在是高。
没有第三方软件,你的程序在任何位置都可以运行出我想要的实际效果。
但为什么某些拆分的txt略大于100k呢,有101k的,有102k的,能解释一下吗?

[ 本帖最后由 yylogo 于 2008-10-9 09:46 编辑 ]
发表于 2008-10-9 10:55:52 | 显示全部楼层
原帖由 yylogo 于 2008-10-9 09:36 发表
18楼的,我不得不说
姚明啊,高,你实在是高。
没有第三方软件,你的程序在任何位置都可以运行出我想要的实际效果。
但为什么某些拆分的txt略大于100k呢,有101k的,有102k的,能解释一下吗?

你可以修改102400这个数来控制文件大小
发表于 2008-10-9 12:10:53 | 显示全部楼层
  楼主不是指定要用特定的符号结束吗?难道指定的结束符号只位于每一行的结尾处?还请说明文本格式,可能还可以写出更高效的代码。
 楼主| 发表于 2008-10-9 13:58:14 | 显示全部楼层

回复 21楼 的帖子

文本格式为txt的小说。切分小说我想最好以一个正规标点符号结束,可能会有e文小说,所以我说:“以中文句号、英文句号或中英文问号结束每一章”
我希望你说的“可能还可以写出更高效的代码。”
谢谢!
发表于 2008-10-9 17:52:03 | 显示全部楼层
  原以为你每一行只有一个句号呢,如果不止一个句号的话,还是非常麻烦的。
 楼主| 发表于 2008-10-9 21:17:43 | 显示全部楼层
尘土飞扬,你好像好没有完全理解我的意思。
也许我没有表达清楚,我再理一理:
我要将一篇较大的小说切分为若干个不大于100k的小章节,每个被切分的txt文档的最末尾要以一个句号结束。
发表于 2008-10-9 21:50:04 | 显示全部楼层
  如果需要只需要切分为100K左右的小章节倒还好办,但是,要保证每个文档的末尾要以一个句号结束,则就很有难度了,除非每行都是以句号结尾,否则,纯批处理的效率将十分低下。18楼的代码仅能实现小章节在100K左右,还不能保证能以句号结尾。
发表于 2008-10-9 21:58:14 | 显示全部楼层
不知这样可否:
第一个文件的尾部(最后出现的一个全角句号或问号到全文结束)会出现在第二个文件的头部。即:这段文本信息即出现在第一个文件中(尾部),也出现在第二个文本中(头部)。不过借助了两个第三方工具split.exe wfr.exe
  1. @echo off
  2. :loop
  3. setlocal enabledelayedexpansion
  4. set/p file=请把要处理的文件拖到此处:
  5. for /f "delims=" %%a in ("%file:"=%") do (
  6.      md "%%~na"
  7.      split  -b 100k "%file:"=%" "%%~na\%%~na_"
  8.      ren "%%~na\*" "*.txt"
  9.      set "name=%%~na"
  10. )
  11. for /f "delims=" %%a in ('dir /b /s /on "%name%\*.txt"') do set/a n+=1&set "_!n!=%%a"
  12. set/a n-=1
  13. for /l %%i in (1 1 %n%) do (
  14.      set/a x=%%i+1
  15.      type "!_%%i!"|wfr /exp /r:"[\r\n]" /t|wfr /exp /r:".*[。?]" /t>"%name%\tmp.txt"
  16.      (type "%name%\tmp.txt"&echo.&call,type "%%_!x!%%")>"%name%\tmp.tmp"
  17.      call,move /y "%name%\tmp.tmp" "%%_!x!%%"
  18. )
  19. del "%name%\tmp.txt"
  20. endlocal
  21. pause
复制代码
wfr.exe下载:http://bbs.bathome.net/thread-1909-1-2.html
从第二个文件开始,大小会大于100k。
先下载split.exe wfr.exe 放到此批处理所在目录中OK。

[ 本帖最后由 pusofalse 于 2008-10-9 22:07 编辑 ]
发表于 2008-10-10 00:02:10 | 显示全部楼层
我的思路是 能否把原文本的标点都给定义了 然后判断最后一个字符是否标点
 楼主| 发表于 2008-10-10 00:34:59 | 显示全部楼层

再次测试

原帖由 namejm 于 2008-10-9 21:50 发表
  如果需要只需要切分为100K左右的小章节倒还好办,但是,要保证每个文档的末尾要以一个句号结束,则就很有难度了,除非每行都是以句号结尾,否则,纯批处理的效率将十分低下。18楼的代码仅能实现小章节在100K左右 ...

再次测试一个2.22m的文件,发现18楼的不仅可以以一个标点符号结束,而且结束的地方恰好是原文章的一个段落的结束,比我想的还要好。标点符号包括句号、分号、引号和省略号。
尘土飞扬先生,你再仔细看看他的代码,并测试一个较大的txt文档,你会发现他的效果很好,2.22m的文件切分时间是35秒,txt文档再大也大不了多少了,我这里的txt小说最大的也不过5m左右。所以,我觉得18楼的最好,没有第三方软件,代码也简洁。
只有一点美中不足,有几个切分的txt为101k,超出题目要求,(但并不影响我的实际要求),他说“你可以修改102400这个数来控制文件大小”,可我不会,你能就18楼的代码完美一下吗?控制住切分的txt不超出100k。
发表于 2008-10-10 01:08:04 | 显示全部楼层

回复 28楼 的帖子

公司一台服务器用来存放日志的txt文档已经700MB了,还在每天增加......
发表于 2008-10-10 01:09:15 | 显示全部楼层
批处理的效率肯定不理想 代码也没你想那么好  只是你的文本每行字符都在范围内,也因每行的结束都是标点,那样的话又可避免切分好的文本最后缺少标点问题
另把102400改小一下试看如何 你可以改为102300 102200 102100  直到满意
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:40 , Processed in 0.019883 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表