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

[文本处理] [已解决]再提一个批处理实现TXT排版的问题,困扰我好久了。

本帖最后由 每天几分 于 2012-9-25 11:35 编辑

多谢楼下2位大大,熬夜写代码,辛苦了!半角空格我自己再处理一下吧。

是这样:行首有2个空格,左引号在上一行,右引号在下一行或下几行,这种情况怎样将下面的句子切换上来。

示例:
  1.     “遇见了你,从那以后,我就跟你走了。
  2.     天涯海角,**蛮荒,从此暗无天日,从此日夜担忧,被人追杀。
  3.     可是,我从来没有后悔过的……”
复制代码
要求:
  1.     “遇见了你,从那以后,我就跟你走了。天涯海角,**蛮荒,从此暗无天日,从此日夜担忧,被人追杀。可是,我从来没有后悔过的……”
复制代码
1

评分人数

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

回复 11# 每天几分


    以后还是上传个有代表性的附件作为测试样本吧,1、2k 就够了

TOP

本帖最后由 每天几分 于 2012-9-25 11:57 编辑

回复 13# terse


   
嗯,除了句号后面还有2个全角空格,大部分已经解决了,还有一种情况:引号之间存在多行的,切换不上来。

如:

  “反反复复。”反反复复说:“反反复复发反反复复,反反复复发反反复复反反复复发反反。复复反反复复反反复复发反反复复反反复复发反反复复,反反复复发反反复复反反复复。
  反反复复发反反复复,反反复复发反反复复反反复复,发反反复复反反复复。
  反反复复,发反反复复反反复复发反反复复。反反复复发反反复复反反复复,反反复复发反反复复,反反复复发反反复复反反复复发反反复复反反复复。
  反反复复发反反复复反反复复,发反反复复反反复复反反复复发反反,复复反反复复发反反复复,反反复复发反反复复反反复复。
  反反复复,反反复复反反复复发反反复复,反反复复发反反复复反反复复发反反复复反反复复。”

TOP

回复 12# 每天几分
把代码里两处echo;后面的空格去掉使之为 echo;!var!和echo;%%i再试

TOP

回复 10# terse

出现半角空格,是俺11L说的情况了。俺没交代清楚。。。

TOP

回复 9# CrLf

不好意思啊,文本情况有点特殊,需要具体操作测试才能交代清楚给出例子的。。。

原文例子:(行首2个全角空格,俺复制到代码里居然出现4个半角空格了。)

  “天地不仁,以万物为诌狗!”
  这世间本是没有什么神仙的,但自太古以来,人类眼见周遭世界,诸般奇异之事,电闪雷鸣,狂风暴雨,又有天灾人祸,伤亡无数,哀鸿遍野,决非人力所能为,所能抵挡。遂以为九天之上,有诸般神灵,九幽之下,亦是阴魂归处,阎罗殿堂。
  ……
  “遇见了你,从那以后,我就跟你走了。
  天涯海角,**蛮荒,从此暗无天日,从此日夜担忧,被人追杀。
  可是,我从来没有后悔过的……”
  ……
  “九天玄刹,化为神雷。
  煌煌天威,以剑引之!”
  ……
  周一仙道:“你懂什么,那大个子所学和佛门颇有些渊源,而佛门真法正好最讲究寂灭定心之道,对这狐媚惑心妖术天生便有抗力。
  但青云门乃是道家,在这点上便差了许多,以这少年的修行,居然能有这份定力,实在少见、少见!”
  ……
  她在风雨中,低声自语,对着张小凡,又彷彿是对着自己深心,轻轻,轻轻道:“你救我护我,不惜自己的性命,我便一般对你了。
  你心中苦楚,天知我知,我不能分担你的痛楚,便与你一道承担。总希望有一日,你能与心中爱人,欢欢喜喜在一起的……”
  话声越来越轻,渐渐消逝。风雨更狂,那身影这般柔弱,若风中受伤的小草,摇摆不定。张小凡心头恍惚,如梦似幻。
  ……
  夜色黑沉,苍穹无语!
  “我们要活下去,我们要最好的土地!”他恶狠狠地说道。
  前方,那个巨人一般的族长没有回头,但他愤怒而沉重的喘息已经透露了他的心情。

TOP

回复 8# 每天几分
稍改了  较多的情况 导致代码的不通用 如不行  明天了

TOP

本帖最后由 CrLf 于 2012-9-25 03:21 编辑

保存为vbs
  1. Set fso = CreateObject("SCripting.FileSystemObject")
  2. ts = fso.OpenTextFile("a.txt",1).ReadAll
  3. WScript.Echo ts
  4. Set re = New RegExp
  5. re.Global = True
  6. re.MultiLine = False
  7. re.Pattern = "(“.*?)\r\n\s*(.*”)"
  8. fso.OpenTextFile("a.txt",2).write re.Replace(ts,"$1$2")
复制代码
1

评分人数

TOP

本帖最后由 每天几分 于 2012-9-25 11:02 编辑

回复 7# terse


还差一点点,正常的引号所在行、段,其他正常句子,排版要保持不变。

TOP

回复 6# 每天几分
已修改  这样吗?

TOP

本帖最后由 每天几分 于 2012-9-25 11:00 编辑

回复 5# terse


    额,应该是我说得不清楚了。。。引号前面、后面还有正常句子的,怎么也过滤掉了。。。

TOP

回复 4# 每天几分 再试如何

TOP

本帖最后由 每天几分 于 2012-9-25 10:59 编辑

回复 2# terse


    好像还不行,文本后面还有其他句子的,而且是隔行、隔段落出现。

TOP

本帖最后由 每天几分 于 2012-9-25 00:39 编辑

回复 2# terse


后面多了一行。。。

TOP

本帖最后由 terse 于 2012-9-25 03:01 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "tokens=*" %%i in (a.txt) do (
  3.     set "str=%%~nxi"
  4.     if defined var (
  5.        set "var=!var!%%~nxi"
  6.     ) else if "!str:“=!" neq "!str!" (set var=!str!)else echo; %%i
  7.       if "!str:”=!" neq "!str!" echo; !var!&set "var="
  8. ))>tem.txt
  9. tem.txt
  10. pause
复制代码
1

评分人数

TOP

返回列表