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

再次测试

原帖由 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。

TOP

我的思路是 能否把原文本的标点都给定义了 然后判断最后一个字符是否标点

TOP

不知这样可否:
第一个文件的尾部(最后出现的一个全角句号或问号到全文结束)会出现在第二个文件的头部。即:这段文本信息即出现在第一个文件中(尾部),也出现在第二个文本中(头部)。不过借助了两个第三方工具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 编辑 ]
心绪平和,眼藏静谧。

TOP

  如果需要只需要切分为100K左右的小章节倒还好办,但是,要保证每个文档的末尾要以一个句号结束,则就很有难度了,除非每行都是以句号结尾,否则,纯批处理的效率将十分低下。18楼的代码仅能实现小章节在100K左右,还不能保证能以句号结尾。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

尘土飞扬,你好像好没有完全理解我的意思。
也许我没有表达清楚,我再理一理:
我要将一篇较大的小说切分为若干个不大于100k的小章节,每个被切分的txt文档的最末尾要以一个句号结束。

TOP

  原以为你每一行只有一个句号呢,如果不止一个句号的话,还是非常麻烦的。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 21楼 的帖子

文本格式为txt的小说。切分小说我想最好以一个正规标点符号结束,可能会有e文小说,所以我说:“以中文句号、英文句号或中英文问号结束每一章”
我希望你说的“可能还可以写出更高效的代码。”
谢谢!

TOP

  楼主不是指定要用特定的符号结束吗?难道指定的结束符号只位于每一行的结尾处?还请说明文本格式,可能还可以写出更高效的代码。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

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

你可以修改102400这个数来控制文件大小

TOP

18楼的,我不得不说
姚明啊,高,你实在是高。
没有第三方软件,你的程序在任何位置都可以运行出我想要的实际效果。
但为什么某些拆分的txt略大于100k呢,有101k的,有102k的,能解释一下吗?

[ 本帖最后由 yylogo 于 2008-10-9 09:46 编辑 ]

TOP

也来一个
利用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. )
复制代码

TOP

问题出在这,程序不能自己建立一个与文件同名的文件夹,需要手动建立,再测试,就有效果了,而且有了标点符号做最后的结尾,看到了,不过是人为添加的标点符号。。。
谢谢了。

TOP

你把要处理的文件和批处理放在同一个文件夹里试试
技术问题请到论坛发帖求助!

TOP

我测试可以啊???
技术问题请到论坛发帖求助!

TOP

13楼的代码测试不能通过,没有效果,提示:环境变量paixu,没有定义。

TOP

返回列表