Board logo

标题: [文本处理] 批处理如何实现文本内容按列混排的效果? [打印本页]

作者: largedy    时间: 2009-5-10 00:07     标题: 批处理如何实现文本内容按列混排的效果?

以“。”、“!”、“?”为分介符来颠倒排列。

例:
1。2!3?4。5!6!7?8。9。

希望编排后的是:
2!1。4。3?5!6!8。7?
就是让1句与2句颠倒、3句与4句颠倒、当内容最后一句找不到颠倒的句子时,就删除最后一句。


123456789代表任意字符,但不句括“。”“?”“!”

有点难度吧???
作者: wxcute    时间: 2009-5-10 09:47

“123456789代表任意字符”

是代表任意单个字符,还是多个字符的字符串。
作者: 随风    时间: 2009-5-10 10:01

1234567890是代表任意单个字符,还是多个字符的字符串都可以
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3.    set "str=%%i"
  4.    setlocal enabledelayedexpansion
  5.    set var=&set "var2="&set /a n=0,x=0
  6.    for %%a in (。 、 ! ?) do set "str=!str:%%a=%%a" "!"
  7.    set "str="!str:~0,-1!"
  8.    for %%a in (!str!) do (
  9.       set /a n+=1,m=n%%2
  10.       set .!n!=%%~a
  11.    )
  12.    if !m! neq 0 set /a n-=1
  13.    if !n! gtr 1 (
  14.       for /l %%a in (1 1 !n!) do (
  15.          set "var=!.%%a!!var!"
  16.          set /a x=x%%2+1
  17.          if !x! equ 2 set "var2=!var2!!var!"&set "var="
  18.       )
  19.       echo.!var2!
  20.    )
  21.    endlocal
  22. )
  23. pause
复制代码




.

[ 本帖最后由 随风 于 2009-5-10 10:51 编辑 ]
作者: 随风    时间: 2009-5-10 12:41

完善一下,上面代码未考虑到 1?2。 3!www 最后一位不是指定符号的情况。
  1. @echo off&cls
  2. for %%a in (。 、 ! ?) do set ..%%a=a
  3. for /f "delims=" %%i in (a.txt) do (
  4.    set "num=%%i"&set "str="%%i""
  5.    setlocal enabledelayedexpansion
  6.    set var=&set "var2="&set /a n=0,x=0
  7.    for %%a in (。 、 ! ?) do set "str=!str:%%a=%%a" "!"
  8.    if defined ..!num:~-1! set "str=!str:~0,-2!"
  9.    for %%a in (!str!) do (
  10.       set /a n+=1,m=n%%2
  11.       set .!n!=%%~a
  12.    )
  13.    if !m! neq 0 set /a n-=1
  14.    if !n! gtr 1 (
  15.       for /l %%a in (1 1 !n!) do (
  16.          set "var=!.%%a!!var!"
  17.          set /a x=x%%2+1
  18.          if !x! equ 2 set "var2=!var2!!var!"&set "var="
  19.       )
  20.       echo.!var2!
  21.    )
  22.    endlocal
  23. )
  24. pause
复制代码

作者: largedy    时间: 2009-5-10 14:52

效果已经实现,现在问个菜鸟级的问题,如何在多个文件里面批量实现上述功能,并且是修改该文件。
上面的批处理执行过后,只是在DOS里面显示出来,怎么能保存呢?如果是*.*是否可以批量修改*.*文件?




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