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

[文本处理] 批处理如何实现按最少字数且按指定符号分割TXT?

[复制链接]
发表于 2011-2-27 22:12:00 | 显示全部楼层
我晕,整个文章就是一行啊,这个用批是解决不了的。。。。
发表于 2011-2-27 22:12:56 | 显示全部楼层

回复 15楼 的帖子

请把文件内容以附件的方式上传到顶楼
 楼主| 发表于 2011-2-28 00:18:15 | 显示全部楼层
原帖由 Batcher 于 2011-2-27 22:12 发表
请把文件内容以附件的方式上传到顶楼


附件已上传到顶楼 版主 看您的啦
发表于 2011-2-28 02:05:15 | 显示全部楼层
还是纯批,请选择好合适的分隔符,要求分隔符在文字中出现总次数不大于31次,同时每两个分隔符间的文字不大于4096个:
  1. @echo off&setlocal enabledelayedexpansion
  2. del /q part_*.txt 2>nul
  3. set /p zx=请输入最小字符数:
  4. set /p zf=请输入分隔符:
  5. set /a n=1,m=1
  6. :lp
  7. for /f "tokens=%n%* delims=%zf%" %%a in (a.txt) do (
  8.     set "str=%%a"&set /a min=0,pin=8192
  9.     for /l %%c in (1,1,14) do (
  10.         for %%c in (!pin!) do (
  11.             if "!str:~%%c!" equ "" (
  12.                set /a max=pin
  13.                ) else (
  14.                set /a min=pin
  15.             )
  16.             set /a "pin=max+min,y=pin%%2,pin=pin/2+y"
  17.         )
  18.     )
  19.     set /a num+=pin
  20.     if !num! geq %zx% (
  21.        >>part_!m!.txt echo !var!!str!
  22.        set /a m+=1,num=0&set "var="
  23.        ) else (
  24.        set "var=!var!!str!"
  25.     )
  26.     set /a n+=1&goto lp         
  27. )
  28. >>part_%m%.txt echo !var!
  29. echo 搞定。&pause>nul
复制代码
发表于 2011-2-28 02:14:49 | 显示全部楼层
附上测试文本,分隔符为#(我自己加上去的—|—)
 楼主| 发表于 2011-2-28 08:47:29 | 显示全部楼层
原帖由 batman 于 2011-2-28 02:05 发表
还是纯批,请选择好合适的分隔符,,同时每两个分隔符间的文字不大于4096个:@echo off&setlocal enabledelayedexpansion
del /q part_*.txt 2>nul
set /p zx=请输入最小字 ...


要求分隔符在文字中出现总次数不大于31次 是说在整篇文章中出现的次数不大于31次吗???

我测试了以下 分割出来的所有小文本的内容都是相同的,这是怎么回事呢?

用了您的测试文本 发现分割不全,我用。号分割才分出来几个文本,数量不对呢。

[ 本帖最后由 chuan31 于 2011-2-28 08:59 编辑 ]
发表于 2011-2-28 09:38:15 | 显示全部楼层

回复 21楼 的帖子

。号在文本中出现次数在31次以内?(因为for中tokens不能大于32),你没看清我的说明吧,请用#做分隔符试试我上传的文本吧。。。
 楼主| 发表于 2011-2-28 17:59:20 | 显示全部楼层
原帖由 batman 于 2011-2-28 09:38 发表
。号在文本中出现次数在31次以内?(因为for中tokens不能大于32),你没看清我的说明吧,请用#做分隔符试试我上传的文本吧。。。


不过我实际中就是要按句号分割啊 所以不能按#号 版主看看还有没有其他的途径可以解决
发表于 2011-2-28 18:10:45 | 显示全部楼层
批一次性能处理的字节数上限是8192,换算成汉字就是4096个,你如果真要用批来解决的话,你的文本字符数就要受到限制,要不就要先手动分解成多个文本(每个应小于8000个字节,4000个汉字)再处理了。。。。
发表于 2011-3-2 21:00:58 | 显示全部楼层

回复 8楼 的帖子

因为楼主的文件是只有一行的,用set赋值到变量是不成功的,所以直接就跑到代码结尾去了……我估计是这个原因,所以没运行成功。
 楼主| 发表于 2011-3-10 19:51:55 | 显示全部楼层
那要实现这个功能怎么办呢 有没有其他的方法?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 01:57 , Processed in 0.018183 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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