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

[文本处理] [已解决]批处理如何读取文本中的某一数值,并计算其上下行之间的数值差?

本帖最后由 lanzl 于 2011-5-4 00:25 编辑

如何批处理读取文本中的某一数值,并计算其上下行之间的数值差

以下字母不分大小写,文本中的数值全为整数


a.txt

22
33
13
3
1
4
44
23            --x1--
12            --X--
3
42            --y--
               




任意查找文本a.txt中的一个数值 以3为例 x为3的前一个数值 x1为X的前一个数值 y为3的后一个数值
(一)查找文本中的3并以x----3----y      Z(z为X与Y的正数值差)保存到B.txt(文本中可能有多个3数值出现),并以文本最后一次出现的3为定义, 在文本的后面计算并显示出m (m数值为x1 +- Z1<Z1为Z加减0,1和2的数值>  通常这m可能有10个不同数值,M值为负数时不显示
  (二)查找文本中的最后出现的3并以 X1-X= N(N为X1与X的正数值差)保存到C.txt,并在文本的后面计算并显示出T (T数值为Y +- N1<N1为N加减0,1,2的数值,T为负数时不显示

如上面内容不容易懂,我只是想得到下面的结果
B.txt
13---3---1      12
12---3---42     30
(23+28) (23-28)
(23+29) (23-29)
(20+30) (23-30)
(23+31) (23-31)
(23+32) (23-32)        ;其中数值为负的结果不显示

c.txt
23-12=11
51(42+9) 33(42-9)
52(42+10) 32(42-10)
53(42+11) 31(42-11)
54(42+12) 30(42-12)
55(42+13) 29(42-13)
============================================以下引用

3出现在第一行或者最后一行咋办?
Batcher 发表于 2011-5-3 20:55



呵呵,版本还真提到点上了。如果出现这种情况就提示一下不计算不显示

============================================以下引用


谢谢2楼hanyeguxing 版主,已经完美解决
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p n=请输入数值
  3. for /f %%a in (a.txt) do (
  4.         set/ax+=1,y=a-4&set #!x!=%%a
  5.         if !y! geq 1 set #!y!=
  6.         if defined c if !x! geq 4 (
  7.                 set/a z=x-3
  8.                 for %%b in (!z!) do (
  9.                         set/aa=!#%%b!,b_=b,d=%%a,f=b-%%a
  10.                         if !f! lss 0 set f=!f:~1!
  11.                         >>b.txt echo;!b!---!c!---%%a    !f!
  12.                         set c=
  13.                 ))
  14.         if %%a==%n% (set c=%%a) else set b=%%a
  15. )
  16. set/a g=a-b_
  17. >>c.txt echo;%a%-%b_%=%g%
  18. for /l %%a in (-2,1,2) do (
  19.         set/a e=f+%%a,e1=a+e,e2=a-e,g0=g+%%a,g1=d+g0,g2=d-g0&set e3=&set g3=
  20.         if !g1! geq 0 set "g3=!g1!(%d%+!g0!)  "
  21.         if !g1! geq 0 set "g3=!g3!!g2!(%d%-!g0!)"
  22.         if !e1! geq 0 set "e3=!e1!(%a%+!e!)  "
  23.         if !e2! geq 0 set "e3=!e3!!e2!(%a%-!e!)"
  24.         >>b.txt echo;!e3!
  25.         >>c.txt echo;!g3!
  26. )
复制代码
1

评分人数

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

本帖最后由 hanyeguxing 于 2011-5-3 23:25 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=3
  3. for /f %%a in (a.txt) do (
  4. set/ax+=1,y=a-4&set #!x!=%%a
  5. if !y! geq 1 set #!y!=
  6. if defined c if !x! geq 4 (
  7. set/a z=x-3
  8. for %%b in (!z!) do (
  9. set/aa=!#%%b!,b_=b,d=%%a,f=b-%%a
  10.                         if !f! lss 0 set f=!f:~1!
  11. >>b.txt echo;!b!---!c!---%%a    !f!
  12. set c=
  13. ))
  14. if %%a==%n% (set c=%%a) else set b=%%a
  15. )
  16. set/a g=a-b_
  17. >>c.txt echo;%a%-%b_%=%g%
  18. for /l %%a in (-2,1,2) do (
  19. set/a e=f+%%a,e1=a+e,e2=a-e,g0=g+%%a,g1=d+g0,g2=d-g0&set e3=&set g3=
  20. if !g1! geq 0 set "g3=!g1!(%d%+!g0!)  "
  21. if !g1! geq 0 set "g3=!g3!!g2!(%d%-!g0!)"
  22. if !e1! geq 0 set "e3=!e1!(%a%+!e!)  "
  23. if !e2! geq 0 set "e3=!e3!!e2!(%a%-!e!)"
  24. >>b.txt echo;!e3!
  25. >>c.txt echo;!g3!
  26. )
复制代码
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

3出现在第一行或者最后一行咋办?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

3出现在第一行或者最后一行咋办?
Batcher 发表于 2011-5-3 20:55



呵呵,版本还真提到点上了。如果出现这种情况就提示一下不计算不显示吧

TOP

看懂你的问题还难过写批处理
任意查找文本a.txt中的一个数值 以3为例 x为3的前一个数值 x1为X的前一个数值 y为3的后一个数值

这句话居然连个标点符号也没有,LZ的确够省略的。

TOP

看懂你的问题还难过写批处理

这句话居然连个标点符号也没有,LZ的确够省略的。
yjstone 发表于 2011-5-3 21:11



文字还真不知怎么才能比较清晰地提出来

TOP

举例时应简洁概括,切中要点,不宜照搬复杂不易找到规律的实际文本,因为把握规律是写批处理的大前提

TOP

@echo off&setlocal enabledelayedexpansion
set n=3
for /f %%a in (a.txt) do (
        set/ax+=1,y=a-4&set #!x!=%%a
        if !y! geq 1 set #!y!=
        if defined c if !x! geq 4 (
                set/a z=x-3
                for %%b in (!z!)  ...
hanyeguxing 发表于 2011-5-3 19:49




谢谢版主

TOP

膜拜2楼 看蒙了。。。
花开不问月,不语笑红尘.

TOP

返回列表