Board logo

标题: [文本处理] [已解决]如何用批处理得出文本数字行内位数之间的差 [打印本页]

作者: qzwifi    时间: 2012-10-7 23:37     标题: [已解决]如何用批处理得出文本数字行内位数之间的差

本帖最后由 qzwifi 于 2012-10-8 13:14 编辑

例:
文本a.txt内容为:
01 02 03 04 05 06
01 02 03 04 05 07
01 02 03 04 05 08

求每一行数字位数之间的差,保存为b.txt

比如:

01 02 03 04 05 06
01与02 之间差1
02与03 之间差1
03与04 之间差1
04与05 之间差1
05与06 之间差1
所以01 02 03 04 05 06这一行位数之间的差是 1 1 1 1 1

01 02 03 04 05 07
01与02 之间差1
02与03 之间差1
03与04 之间差1
04与05 之间差1
05与07 之间差2
所以01 02 03 04 05 07这一行位数之间的差是 1 1 1 1 2

01 02 03 04 05 08
01与02 之间差1
02与03 之间差1
03与04 之间差1
04与05 之间差1
05与08 之间差3
所以01 02 03 04 05 08这一行位数之间的差是 1 1 1 1 3

------------------------

因而文本a.txt内容:
01 02 03 04 05 06
01 02 03 04 05 07
01 02 03 04 05 08

处理后得出行内位数之间的差保存为b.txt
1 1 1 1 1
1 1 1 1 2
1 1 1 1 3
作者: FOR    时间: 2012-10-8 01:54

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims= " %%i in (a.txt) do (
  3. set /a n=1%%i&set "m="
  4. for %%a in (%%j) do (
  5. set /a n-=1%%a
  6. set m=!m! !n!
  7. set /a n=1%%a
  8. )
  9. echo %%i %%j 位数之间的差是!m:-=!
  10. )
  11. pause
复制代码

作者: qzwifi    时间: 2012-10-8 03:18

回复 2# FOR

    FOR 你好,非常感谢你的代码,是可行的。但与我想要的保存的格式上有一点出入。。。

你的代码运行后是:
01 02 03 04 05 06 位数之间的差是 1 1 1 1 1
01 02 03 04 05 07 位数之间的差是 1 1 1 1 2
01 02 03 04 05 08 位数之间的差是 1 1 1 1 3

但我想要的是直接就保存为b.txt:
1 1 1 1 1
1 1 1 1 2
1 1 1 1 3

不要前面的:
01 02 03 04 05 06 位数之间的差是
01 02 03 04 05 07 位数之间的差是
01 02 03 04 05 08 位数之间的差是

我自己试修改很久都没有成功,望高手稍加完善一下,谢谢!
作者: terse    时间: 2012-10-8 10:35

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=1*" %%i in (a.txt) do (
  3.         set /a n=1%%i&set "m="
  4.         for %%a in (%%j) do (
  5.                 set /a n-=1%%a
  6.                 set m=!m! !n!
  7.                 set /a n=1%%a
  8.         )
  9.         set m=!m:-=!
  10.         echo!m!
  11. ))>b.txt
  12. pause
复制代码

作者: forfiles    时间: 2012-10-8 12:39

回复 3# qzwifi


    把他的代码里面%%i %%j 位数之间的差是删掉
作者: qzwifi    时间: 2012-10-8 13:13

回复 4# terse


    已OK,谢谢terse 及各位大哥!
作者: wc726842270    时间: 2012-10-8 13:49

无聊我也来一个
  1. @echo off 2>nul 3>nul
  2. set a=0
  3. for /f "delims=" %%i in (目标文本.txt) do (
  4. setlocal enabledelayedexpansion
  5. for %%j in (%%i) do (
  6. set f=!e!           
  7. set e=%%j
  8. set /a oe=!e:~1!-!f:~1!
  9. set line=!line! !oe!
  10. )
  11. echo !line!
  12. endlocal   
  13. )
  14. pause
复制代码





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