本帖最后由 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 版主,已经完美解决- @echo off&setlocal enabledelayedexpansion
- set /p n=请输入数值
- 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!) do (
- set/aa=!#%%b!,b_=b,d=%%a,f=b-%%a
- if !f! lss 0 set f=!f:~1!
- >>b.txt echo;!b!---!c!---%%a !f!
- set c=
- ))
- if %%a==%n% (set c=%%a) else set b=%%a
- )
- set/a g=a-b_
- >>c.txt echo;%a%-%b_%=%g%
- for /l %%a in (-2,1,2) do (
- set/a e=f+%%a,e1=a+e,e2=a-e,g0=g+%%a,g1=d+g0,g2=d-g0&set e3=&set g3=
- if !g1! geq 0 set "g3=!g1!(%d%+!g0!) "
- if !g1! geq 0 set "g3=!g3!!g2!(%d%-!g0!)"
- if !e1! geq 0 set "e3=!e1!(%a%+!e!) "
- if !e2! geq 0 set "e3=!e3!!e2!(%a%-!e!)"
- >>b.txt echo;!e3!
- >>c.txt echo;!g3!
- )
复制代码
|