找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23930|回复: 6

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

[复制链接]
发表于 2012-10-7 23:37:00 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-10-8 01:54:33 | 显示全部楼层
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
qzwifi + 1 谢谢帮助!

查看全部评分

 楼主| 发表于 2012-10-8 03:18:52 | 显示全部楼层
回复 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 位数之间的差是

我自己试修改很久都没有成功,望高手稍加完善一下,谢谢!
发表于 2012-10-8 10:35:10 | 显示全部楼层
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
qzwifi + 1 谢谢帮助!

查看全部评分

发表于 2012-10-8 12:39:41 | 显示全部楼层
回复 3# qzwifi


    把他的代码里面%%i %%j 位数之间的差是删掉
 楼主| 发表于 2012-10-8 13:13:48 | 显示全部楼层
回复 4# terse


    已OK,谢谢terse 及各位大哥!
发表于 2012-10-8 13:49:53 | 显示全部楼层
无聊我也来一个

  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:22 , Processed in 0.012231 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表