Board logo

标题: [文本处理] 【已解决】批处理怎样把相连数字用~连接? [打印本页]

作者: zhanglei1371    时间: 2014-8-5 20:45     标题: 【已解决】批处理怎样把相连数字用~连接?

本帖最后由 zhanglei1371 于 2014-8-7 09:35 编辑

如何用代码实现 将连续数字的“头”和“尾”用~相连
13, 14, 15, 19
2,3,4,6,7,8,9
.....
变为:
13~15,19
2~4,6~9
作者: xxpinqz    时间: 2014-8-6 16:06

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     set str=%%a
  4.     setlocal enabledelayedexpansion
  5.     set str=!str:,= !
  6.     set str=!str:,= !
  7.     for %%b in (!str!) do (
  8.         if not defined out (
  9.          set /a a=b=out=%%b
  10.         ) else (
  11.             if !a! equ %%b (
  12.              set "out=!b!~%%b"
  13.             ) else (
  14.                 set "out=!out!,%%b"
  15.                 set "b=!out!"
  16.                 set a=%%b
  17.             )
  18.         )
  19.         set /a a+=1
  20.     )
  21.     echo,!out!
  22.     endlocal
  23. ))>b.txt
复制代码

作者: CrLf    时间: 2014-8-6 17:14

本帖最后由 CrLf 于 2014-8-7 17:43 编辑

简单暴力解,疯狂地 set:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (0 1 98) do set /a $%%a=%%a+1
  3. for /f "delims=" %%a in (a.txt) do (
  4.    set "str=,%%a,"
  5.    set "str=!str:,=,!"
  6.    set "str=!str: =!"
  7.    for %%b in (!str!) do for %%c in (!$%%b!) do (
  8.       set "str=!str:~%%b,%%c,=~%%c,!"
  9.       set "str=!str:,%%b,%%c~=,%%b~!"
  10.       set "str=!str:,%%b,%%c,=,%%b~%%c,!"
  11.    )
  12.    echo !str:~1,-1!
  13. )
  14. pause
复制代码

作者: CrLf    时间: 2014-8-6 17:15

回复 2# xxpinqz


    目测可以省掉 set str=!str:,= !,因为 , = ; 空格 tab 都是分隔符
作者: xxpinqz    时间: 2014-8-7 16:56

回复 4# CrLf
多谢指点。

这set的炉火纯青啊。佩服!不过set的的缺陷最怕碰到2,3,4,1,2,3,4
作者: CrLf    时间: 2014-8-7 17:45

回复 5# xxpinqz


    先前未考虑乱序的情况,不过再加一个 set "str=!str:,%%b,%%c~=,%%b~!" 就好了,已修改




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