|
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 |
|