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

不用逐字符法,真的有点困难:

以下代码没有考虑特殊字符的情况,所取分隔符为每行最后一个(考虑了一行有10个以内相同分隔符的情况),楼主先测试吧:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p zx=请输入最小字符数:
  3. set /p zf=请输入分隔符:
  4. set /a n+=1
  5. for /f "delims=" %%a in (a.txt) do (
  6.     set "str=!var!%%a"&set /a min=0,pin=8190&set "var="
  7.     for /l %%a in (1,1,14) do (
  8.         for %%a in (!pin!) do (
  9.             if "!str:~%%a!" equ "" (
  10.                set /a max=pin
  11.                ) else (
  12.                set /a min=pin
  13.             )
  14.             set /a "pin=(max+min),y=pin%%2,pin=pin/2+y"
  15.         )
  16.     )
  17.     set /a num+=pin
  18.     if !num! geq %zx% (
  19.        if "!str:%zf%=!" neq "!str!" (
  20.           set "var=!str!"
  21.           for /l %%a in (1,1,10) do set "var=!var:*%zf%=!"
  22.        )
  23.     )
  24.     if defined var (
  25.        for %%a in (!var!) do echo !str:%%a=!>>!n!.txt
  26.        set /a n+=1,num=0
  27.        ) else (
  28.        echo !str!>>!n!.txt
  29.     )
  30. )   
  31. echo 搞定。&pause>nul
复制代码

[ 本帖最后由 batman 于 2011-2-27 15:47 编辑 ]
***共同提高***

TOP

回复 12楼 的帖子

我测试了可以用,我的代码也不可向原文件输出任何内容,可不可以把你的文件内容贴出来一部分,估计是特殊字符的问题。。。

[ 本帖最后由 batman 于 2011-2-27 19:13 编辑 ]
***共同提高***

TOP

我晕,整个文章就是一行啊,这个用批是解决不了的。。。。
***共同提高***

TOP

还是纯批,请选择好合适的分隔符,要求分隔符在文字中出现总次数不大于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
复制代码
***共同提高***

TOP

附上测试文本,分隔符为#(我自己加上去的—|—)
***共同提高***

TOP

回复 21楼 的帖子

。号在文本中出现次数在31次以内?(因为for中tokens不能大于32),你没看清我的说明吧,请用#做分隔符试试我上传的文本吧。。。
***共同提高***

TOP

批一次性能处理的字节数上限是8192,换算成汉字就是4096个,你如果真要用批来解决的话,你的文本字符数就要受到限制,要不就要先手动分解成多个文本(每个应小于8000个字节,4000个汉字)再处理了。。。。
***共同提高***

TOP

返回列表