返回列表 发帖

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

本帖最后由 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!
)COPY
1

评分人数

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

本帖最后由 hanyeguxing 于 2011-5-3 23:25 编辑
@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!) 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!
)COPY
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

返回列表