Board logo

标题: [文本处理] 【已解决】批处理如何批量以特定字符为界,将原一行分成两行? [打印本页]

作者: pan528    时间: 2014-7-24 15:29     标题: 【已解决】批处理如何批量以特定字符为界,将原一行分成两行?

本帖最后由 pan528 于 2014-7-24 22:58 编辑

一、材料
有以下格式文本若干个:

处理前文本:
【法规标题】全国人大常委会关于《中华人民共和国刑事诉讼法》第二百七十一条第二款的解释
【发布部门】全国人大常委会 【发文字号】
【发布日期】2014.04.24 【实施日期】2014.04.24
【时效性】现行有效 【效力级别】法律解释
【法规类别】刑诉综合规定与解释
全国人民代表大会常务委员会关于《中华人民共和国刑事诉讼法》第二百七十一条第二款的解释
(2014年4月24日第十二届全国人民代表大会常务委员会第八次会议通过)
全国人民代表大会常务委员会根据**实践中遇到的情况,讨论了刑事诉讼法第二百七十一条第二款的含义及被害人对附条件不起诉的案件能否依照第一百七十六条的规定向人民法院起诉的问题,解释如下:
人民**办理未成年人刑事案件,在作出附条件不起诉的决定以及考验期满作出不起诉的决定以前,应当听取被害人的意见。被害人对人民**对未成年犯罪嫌疑人作出的附条件不起诉的决定和不起诉的决定,可以向上一级人民**申诉,不适用刑事诉讼法第一百七十六条关于被害人可以向人民法院起诉的规定。
现予公告。

处理后文本:
【法规标题】全国人大常委会关于《中华人民共和国刑事诉讼法》第二百七十一条第二款的解释
【发布部门】全国人大常委会
【发文字号】
【发布日期】2014.04.24
【实施日期】2014.04.24
【时效性】现行有效
【效力级别】法律解释
【法规类别】刑诉综合规定与解释
全国人民代表大会常务委员会关于《中华人民共和国刑事诉讼法》第二百七十一条第二款的解释
(2014年4月24日第十二届全国人民代表大会常务委员会第八次会议通过)
全国人民代表大会常务委员会根据**实践中遇到的情况,讨论了刑事诉讼法第二百七十一条第二款的含义及被害人对附条件不起诉的案件能否依照第一百七十六条的规定向人民法院起诉的问题,解释如下:
人民**办理未成年人刑事案件,在作出附条件不起诉的决定以及考验期满作出不起诉的决定以前,应当听取被害人的意见。被害人对人民**对未成年犯罪嫌疑人作出的附条件不起诉的决定和不起诉的决定,可以向上一级人民**申诉,不适用刑事诉讼法第一百七十六条关于被害人可以向人民法院起诉的规定。
现予公告。

二、要求
批量以第二个特定字符“【”为界,将原一行分成两行。其余的文本行内容不变。
作者: apang    时间: 2014-7-24 16:00

本帖最后由 apang 于 2014-7-24 18:32 编辑
  1. @set @n=0;/* & echo off
  2. dir /b *.txt | cscript -nologo -e:jscript "%~0"
  3. pause & exit/b & rem */
  4. fso = new ActiveXObject("Scripting.FileSystemObject");
  5. while (!WScript.StdIn.AtEndOfStream) {
  6.     file = WScript.StdIn.ReadLine();
  7.     f = fso.OpenTextFile(file, 1);
  8.     txt = f.ReadAll().replace(/(.)(【.+?)/g, "$1\r\n$2");
  9.     f.Close(); f = null
  10.     fso.CreateTextFile(file, true).Write(txt);
  11. }
复制代码

作者: CrLf    时间: 2014-7-24 16:50

  1. @echo off & setlocal enabledelayedexpansion
  2. set LF=^
  3. for /f %%y in ('copy /z %0 nul') do for %%z in ("%%y!LF!") do (
  4.    endlocal
  5.    for %%a in (*.txt) do (
  6.       for /f "delims=" %%a in (%%~sa) do (
  7.          set str=%%a
  8.          setlocal enabledelayedexpansion
  9.          set str=!str:【=%%~z【!
  10.          if !str:~^,2!==%%~z set str=!str:~2!
  11.          echo !str!
  12.          endlocal
  13.       )
  14.    )>"%%~na_处理.txt"
  15. )
  16. pause
复制代码

作者: CrLf    时间: 2014-7-24 16:53

  1. sed -i "s/【/\r\n\0/2" *.txt
复制代码

作者: CrLf    时间: 2014-7-24 16:57

回复 2# apang


    . 在 win 下等同于 [^\r\n],而 \r 一般不会在文本里单独出现,所以 [^\n] 可以简化成 .
作者: pan528    时间: 2014-7-24 22:54

回复 2# apang


感谢回帖!通过了测试。
作者: pan528    时间: 2014-7-24 22:57

回复 3# CrLf


感谢回帖!通过了测试。

你的批处理水平太高了,能推荐一下提高批处理水平的教程吗?

再次表示感谢!
作者: CrLf    时间: 2014-7-25 00:59

本帖最后由 CrLf 于 2014-7-25 01:12 编辑

回复 7# pan528


批处理其实没什么内容,写多了自然会养成惯用思路,能解决大部分常见问题,看多了就会知道大多数怪异技巧,能搞定一些特殊情况,然后貌似差不多到头了...
虽然简单,不过很好玩,shell 特有的“暴力”属性是大多数优雅的脚本语言所不具备的~
学习资料见:http://bbs.bathome.net/forum-33-1.html,该有的差不多都有了
至于练手,在求助版解决几个问题很快就熟练了...
作者: pan528    时间: 2014-7-26 09:10

回复 8# CrLf


非常感谢!没有到批处理之家前,总在黑暗中摸索,现在有这个多高手老师指点,开始有一点进步了。谢谢指点。
作者: 34205    时间: 2015-1-22 18:57

在Word里面,替换【 成 【^p




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