Board logo

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

作者: sunflowerr_88    时间: 2011-4-27 16:41     标题: [已解决]批处理怎样按每100个汉字后加指定的字符串再按要求分割?

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

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

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

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

单行字符最大数量是多少?
作者: sunflowerr_88    时间: 2011-4-27 16:54

文本只有一行,没有空格,没有换行
作者: sunflowerr_88    时间: 2011-4-27 16:55

文本只有一行,没有空格,没有换行
作者: CrLf    时间: 2011-4-27 17:04

整个文本只有一行??cmd定义不了这么长的变量...
作者: sunflowerr_88    时间: 2011-4-27 17:09

那能不能先将100个汉字划为一行,再做下面步骤呢?
作者: sunflowerr_88    时间: 2011-4-27 17:11

整个文本只有一行??cmd定义不了这么长的变量...
zm900612 发表于 2011-4-27 17:04

整个文本只有一行??cmd定义不了这么长的变量..
作者: sunflowerr_88    时间: 2011-4-27 17:12

整个文本只有一行??cmd定义不了这么长的变量...
zm900612 发表于 2011-4-27 17:04

那能不能先将100个汉字划为一行,再做下面步骤呢?
作者: batman    时间: 2011-4-27 20:41

苦思n久,终于有了希望,代码编写中。。。
作者: sunflowerr_88    时间: 2011-4-27 20:53

感谢批处理之家,感谢batman,感谢铁岭电视台,感谢中央电视台,感谢版主,感谢所有TV.........
在线等待ing...........
作者: batman    时间: 2011-4-27 21:44

本帖最后由 batman 于 2011-4-27 21:45 编辑

需要用到split.exe
下载地址:http://bbs.bathome.net/viewthrea ... ighlight=%2Bbatcher
  1. @echo off&setlocal enabledelayedexpansion
  2. md temp
  3. split -b 8000 a.txt temp\
  4. for /r temp %%a in (*) do (
  5.     for /f "delims=" %%b in (%%a) do (
  6.         set "str=!str!%%b"
  7.         for /l %%b in (0,100,3900) do (
  8.             set /a m+=1
  9.             if !m! leq 10 (
  10.                set "a=!a!!str:~%%b,100!指定字符"
  11.                set "str=!str:~100!"
  12.                ) else (
  13.                set /a n+=1,m=0
  14.                echo !a!>fg_!n!.txt&set "a="
  15.             )
  16.         )
  17.     )
  18. )
  19. if "!a!" neq "" set /a n+=1&echo !a!>fg_!n!.txt
  20. rd /s /q temp
复制代码

作者: sunflowerr_88    时间: 2011-4-27 21:55

这么快就出来了?高人啊,立马测试先
作者: sunflowerr_88    时间: 2011-4-27 22:23

看不懂啊,求解
作者: batman    时间: 2011-4-27 22:23

解决问题了不?
作者: sunflowerr_88    时间: 2011-4-27 22:29

我QQ号874547720,能向您请教吗
作者: batman    时间: 2011-4-27 22:32

首先告诉我问题得到解决了不,没解决我好修改代码。。。
作者: sunflowerr_88    时间: 2011-4-27 22:56

1、split.exe工具在哪下载呢?http://bbs.bathome.net/viewthrea ... ighlight=%2Bbatcher下载下来的工具没法用。
2、刚才测试了个文本,发现无法去行去空格了,真的是一个头二个大啊!
3、另再请教一款好用些的记事本工具。
不会上传附件,只好发个样本:
  2010华军软件园优秀软件名单新鲜出炉(都是装机必备的软件)
  华军资讯消息 由华军软件园主办的2010年我最喜爱的软件评选活动自2010年12月1日上线以来共计收到了网友超过160万次的投票,得到了广大网友和软件厂商的大力支持。
   华军软件园秉着公正、公平、公开的原则,经过编辑和技术的数据统计,评出了二十七款优秀软件,以下是获得2010年华军软件园优秀软件奖的软件名单(注:软件排名不分前后)。。。。。。。。
  
作者: batman    时间: 2011-4-27 22:58

就在这个链接中你找到split.exe下载就是的啊,放在当前目录下就可以了,我也是刚从这里下的。。。
作者: CrLf    时间: 2011-4-27 23:08

本帖最后由 zm900612 于 2011-4-27 23:20 编辑

11# batman


既然用了外部命令,那还不如用sed呢...
  1. sed -i "s/[\x0-\x7f\x8080-\xffff]\{100\}/&\n/g" 1.txt
复制代码

作者: sunflowerr_88    时间: 2011-4-27 23:09

终于搞定了,我下载了个Notepad++编辑器,XP自带的编辑器不知为何就是不能生成。真的万分感谢batman!
作者: sunflowerr_88    时间: 2011-4-27 23:10

谢谢batman大侠这么晚了还一直解答我这菜鸟的问题!
作者: batman    时间: 2011-4-27 23:11

19# zm900612
你测试了sed能处理楼主这样的问题?
作者: sunflowerr_88    时间: 2011-4-27 23:15

22# batman
不是,还是用您提供的链接下载的split.exe,并另下了个Notepad++编辑器,测试成功!
作者: CrLf    时间: 2011-4-27 23:21

22# batman


上次见过别人写。但是我不明白为什么我写的那段时灵时不灵...
作者: sunflowerr_88    时间: 2011-4-27 23:34

刚才没细看,分割出来的文章很乱,有的文本中有N个“指定字符”连在一起,有的文本只有一个“指定字符”,还是没解决啊,杯具了。。。。。
作者: sunflowerr_88    时间: 2011-4-28 01:14

测试了很长时间,时好时坏(不灵的时候居多!)
又在网上搜索了相似软件,到目前为止,我找到一个笨办法:
1、先用TXT文本切割器将一个大文本按一定的等分切割成成N份小文本。(其中有小部分文件头部或尾部有乱码现象,只能手工来修改了,无语)
2、再用批处理将每个小文本结尾处加上指定字符串。(这一步正常)
做到这一步,本文件夹中有860个小文件(每个文件不超过10K),我的目标是按每十个文本文件合并成一个,860个小文件合并成86个文件。在半个小时内,我手工合并了12个(120个小文件),实在受不了了,睡觉啦!
求batman大侠将最后一步写出个批处理行不?
拜谢!
作者: batman    时间: 2011-4-28 08:23

本帖最后由 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         
复制代码

作者: batman    时间: 2011-4-28 08:28

本来还想修改文本分割的代码,但既然楼主已经走到这一步了,就算了。。。
作者: sunflowerr_88    时间: 2011-4-28 09:26

27# batman
亲爱的batman,别介啊,有一步能成功的方法谁还用分几步走啊,请再修改分割代码行不?
作者: batman    时间: 2011-4-28 09:57

本帖最后由 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也会出错。。。
作者: sunflowerr_88    时间: 2011-4-28 10:17

30# batman

今天太忙了,只能等晚上加班再来测试了,希望能一次成功!
作者: qzwqzw    时间: 2011-4-28 10:29

可以先将文本转换为Unicode编码
这样就不会存在分割半个汉字的乱码问题了
cmd /u /c type ANSI.txt > Unicode.txt
作者: batman    时间: 2011-4-28 10:36

32# qzwqzw
学习了,功能已加到代码中。。。
作者: terse    时间: 2011-4-28 17:08

同样外部 可否试下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
复制代码

作者: sunflowerr_88    时间: 2011-4-28 19:58

27# batman
这个代码是用来将每10个小文本合并的吗?貌似不可以的,运行后将所有文件都删除了。
作者: sunflowerr_88    时间: 2011-4-28 20:00

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

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

你可不可以将你的文本做附件贴上来?
作者: batman    时间: 2011-4-28 20:04

35# sunflowerr_88
在编辑时掉了一个x字符,已经修改。。。
作者: sunflowerr_88    时间: 2011-4-28 20:50

这次是真的成功了,我查看了10个文本,无错!batman兄太牛了
作者: Batcher    时间: 2011-4-28 21:14

39# sunflowerr_88


试试34楼的是不是也牛?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2