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

[文本处理] [已解决]批处理怎样按每100个汉字后加指定的字符串再按要求分割?

本帖最后由 sunflowerr_88 于 2011-4-28 20:51 编辑

要求:
一、最好能一次处理不小于1000K以上的文本。(如果做不到,那我只好先分割了)
二、处理步骤:
1、将文本按每100个汉字后加上我指定的字符串,要求不得将汉字切割开!!!(这里是关键关键关键!)
2、按每10个指定的字符串为一组分割成一个文本,最后一个文本不足10个字符串为一个文本。

注:指定的字符串在整个文本中具备唯一性
对于懂批处理的朋友来说很简单的吧?我已经折腾了N天了,眼巴巴地盼着高人解决啊

样本:
1基准统一原则在工件的加工过程中尽可能的采用统一的定位基准称为基准统一原则2工序集中原则工序集中就是将工件的加工,集中在少数几道工序内完成3加工精度加工精度是指零件加工后的实际几何参数与理想几何参数的符合程度4机械加工工艺系统把机械加工:...中有机床、刀具、夹具和工件组。。。。
希望达到的:
第一步:每100个汉字后加上(指定字符)
基准统一原则在工件的加工过程中尽可能的采用统一的定位基准称为(指定字符)基准统一原则2工序集中原则工序集中就是将工件的加工,(指定字符)集中在少数几道工序内完成3加工精度加工精度是指零件加(指定字符)工后的实际几何参数与理想几何参数的符合程度4机械加工(指定字符)工艺系统把机械加工:...中有机床、刀具、夹具和工件组(指定字符)。。。。。。。
第二步:按每10个(指定字符)为一组分割
源文本只有一行,中间无空格
不知我这样说清楚了吗?
1

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

39# sunflowerr_88


试试34楼的是不是也牛?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这次是真的成功了,我查看了10个文本,无错!batman兄太牛了

TOP

35# sunflowerr_88
在编辑时掉了一个x字符,已经修改。。。
***共同提高***

TOP

你可不可以将你的文本做附件贴上来?
***共同提高***

TOP

本帖最后由 sunflowerr_88 于 2011-4-28 20:07 编辑

30# batman
batman兄,运行过这代码了,不行啊,还不如昨晚那段代码呢。。。
要不这样吧,我将测试文本上传上来
额。。。。论坛里上传附件限制50K,我上传到68495856(批处理之家2群)的群共享了

TOP

27# batman
这个代码是用来将每10个小文本合并的吗?貌似不可以的,运行后将所有文件都删除了。

TOP

同样外部 可否试下GAWK
  1. gawk "BEGIN {N=100} {temp=temp$0} END {for (i=1; i<=length(temp); i+=N) printf substr(temp,i,N)\"指定字符\"}" a.txt
复制代码

TOP

32# qzwqzw
学习了,功能已加到代码中。。。
***共同提高***

TOP

可以先将文本转换为Unicode编码
这样就不会存在分割半个汉字的乱码问题了
cmd /u /c type ANSI.txt > Unicode.txt
天的白色影子

TOP

30# batman

今天太忙了,只能等晚上加班再来测试了,希望能一次成功!

TOP

本帖最后由 batman 于 2011-4-28 20:49 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. rd /s /q temp fgfile 2>nul&md temp fgfile
  3. split -b 8000 a.txt temp\
  4. set /a b=0
  5. for /r temp %%a in (*) do (
  6.     set /a "a=(%%~za+b)/200","b=(%%~za+b)%%200"
  7.     for /f "delims=" %%b in (%%a) do (
  8.         set "str=!str!%%b"
  9.         for /l %%b in (1,1,!a!) do (
  10.             set /a m+=1
  11.             if !m! leq 9 set "c=!c!!str:~,100!指定字符"
  12.             if !m! equ 10 set /a n+=1,m=0&echo !c!!str:~,100!指定字符>fgfile\fg_!n!.txt&set "c="
  13.             set "str=!str:~100!"
  14.         )
  15.     )
  16. )
  17. if "!c!" neq "" set /a n+=1&echo !c!>fgfile\fg_!n!.txt
  18. rd /s /q temp&start fgfile
复制代码
--------------------------------------------------------------------------
郁闷,转成unicode根本实现不了读取,8000改成16000也会出错。。。
***共同提高***

TOP

27# batman
亲爱的batman,别介啊,有一步能成功的方法谁还用分几步走啊,请再修改分割代码行不?

TOP

本来还想修改文本分割的代码,但既然楼主已经走到这一步了,就算了。。。
***共同提高***

TOP

本帖最后由 batman 于 2011-4-28 20:43 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%a in (*.txt) do (
  3.      set /a n+=1
  4.      if !n! leq 10 set "str=!str!%%~nxa+"
  5.      if !n! equ 10 set /a m+=1,n=0&copy /y !str:~,-1! fg_!m!.tm&set "str="
  6. )
  7. if defined str set /a m+=1&copy /y !str:~,-1! fg_!m!.tm
  8. del /q *.txt&ren *.tm *.txt         
复制代码
***共同提高***

TOP

返回列表