中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求教: 找给定文件中数组的最小值
作者:
标题: 求教: 找给定文件中数组的最小值 上一主题 | 下一主题
faxa1
新手上路





积分 6
发帖 6
注册 2010-6-29
状态 离线
『楼 主』:  求教: 找给定文件中数组的最小值

问题是这样的:有一个文件11.txt内容如下
$$$START
xxxxxx
xxxxxxx
xxxxxxxx
   0.0000               -164.82   
  0.66667E-01           -192.55   
  0.13333               -190.88   
  0.20000               -188.73   
  0.26667               -186.26   
  0.33333               -183.23   
  0.40000               -178.48   
  0.46667               -158.92   
  0.53333               -179.84   
  0.60000               -185.25   
  0.66667               -184.46   
  0.73333               -182.03   
  0.80000               -178.90   
  0.86667               -174.10   
  0.93333               -159.31   
   1.0000               -172.21   
   1.0667               -179.16   
   1.1333               -180.69   
   1.2000               -179.36   
   1.2667               -176.58   
   1.3333               -172.03   
   1.4000               -160.08   
   1.4667               -167.61   
   1.5333               -175.60   
   1.6000               -178.41   
   1.6667               -178.05   
   1.7333               -175.68   
   1.8000               -171.42   
   1.8667               -161.47   
   1.9333               -164.22   
   2.0000               -173.49   
   2.0667               -177.40   
   2.1333               -178.14   
   2.2000               -176.32   
   2.2667               -172.38   
   
$$$END

现在要在找出第二列中某一行的数值相对上下两行”最大的“的行,并且把该行的值输出到另一文件22.txt。如果可以最好能同时输出行号.
如:
7    0.46667     -158.92
14  0.93333     -159.31   
....

谢谢

我整了两天都没有用批处理文件整出来,郁闷啊。完全被for的参数卡住了,还请各位大侠帮帮忙

ps:不好意思发帖的时候没有注意,出现错误,我是想找第二列中相比周边都大的行,并输出该行的值

[ Last edited by faxa1 on 2010-7-2 at 01:19 ]

2010-6-29 23:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

...

-158.92>-178.48



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-6-30 09:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
faxa1
新手上路





积分 6
发帖 6
注册 2010-6-29
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by slore at 2010-6-30 09:20:
...

-158.92>-178.48

看不懂,我的意思最好可以输出文件,比对部分可以用参数比较。 关键是提取变量有问题,但是数据文件中两列数据前后都有空格,每次使用“delims= ”提取就是不对。
最早尝试
for /f "skip=7 delims=  " %%a  in (freq.txt) do ( echo %%a %%b)

结果却是这样的
   0.0000               -164.82     %b
  0.66667E-01           -192.55     %b
  0.13333               -190.88     %b
  0.20000               -188.73     %b
  0.26667               -186.26     %b

[ Last edited by faxa1 on 2010-6-30 at 23:41 ]

2010-6-30 22:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fengzi
中级用户

金牌会员


积分 315
发帖 152
注册 2007-1-25
状态 离线
『第 4 楼』:  

帮顶一下``



www.baidubao.org
51交友   www.51plmm.cn
爱尚网 www.23hh.com
2010-7-1 03:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

我的意思你到底要小的还是大的?

-3是大于-5,如果你要小于的,为什么把-3输出出来?

你这个case不难。for循环 多设置2个临时变量保存前2次的结果。这样你就可以有3个变量了。拿中间比1,3看满足条件不,满足了就输出。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-1 18:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
faxa1
新手上路





积分 6
发帖 6
注册 2010-6-29
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by slore at 2010-7-1 18:17:
我的意思你到底要小的还是大的?

-3是大于-5,如果你要小于的,为什么把-3输出出来?

你这个case不难。for循环 多设置2个临时变量保存前2次的结 ...

可能是我没有表述得很清楚。

7    0.46667     -158.92
14  0.93333     -159.31   
....
这个是我打算输出的结果样,其中比较的是第二列,找到最“最大”的(不好意思摆了大乌龙,把负号搞忘了,思想就是找到峰值的行),并输出该行,并在前面加个行号。我做的时候问题出现在开始提取某一行的数据,每次都是只有%%a可以得到该行全部数据而%%b没有数据,就是这里有问题

还请slore多指教哈,谢谢

2010-7-2 01:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  

本来可以很简单。。。但是。。。bat不支持浮点数。。。搞得麻烦了点,其实逻辑很简单。
@echo off&setlocal EnableDelayedExpansion
Set n=0
for /f "tokens=3,4 delims=. " %%i in (T.txt) do (
  Set testData_!n!=%%i%%j
  Set /a n+=1
)
Set /a n-=1
for /l %%j in (1,1,%n%) do (
  Set /a i = %%j - 1
  Set /a k = %%j + 1
  call :MAXIN3 %%testData_!i!%% !testData_%%j! %%testData_!k!%% %%j

)
pause

:MAXIN3
  if %2 GEQ %1 (
    if %2 GEQ %3 (
      Set /a OutNum=%2
      echo !OutNum:~0,-2!.!OutNum:~-2,2! @ Line:%4
    )
  )
-158.92 @Line:7
-159.31 @Line:14
-160.08 @Line:21
-161.47 @Line:28

从你提供的数据貌似都是7的倍数行大。。。规律如果一致的话,貌似就简单了啊。
行数从0开始。。。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-2 13:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
faxa1
新手上路





积分 6
发帖 6
注册 2010-6-29
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by slore at 2010-7-2 13:29:
本来可以很简单。。。但是。。。bat不支持浮点数。。。搞得麻烦了点,其实逻辑很简单。

[code]
@echo off&setlocal EnableDelayedExpansion
Set n=0
for /f &q ...

非常感谢slore的解答,谢谢,学到很多,竟然还需要变量延迟以前更本不知道,set的用法还是没搞清除啊
再次谢谢
ps:数据是其他计算随机生成的,只是这里刚好是没七个有一个最大值

[ Last edited by faxa1 on 2010-7-3 at 00:21 ]

2010-7-3 00:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: