标题: 想破头了,记事本查找最大的数字
[打印本页]
作者: dragonamd
时间: 2008-8-23 02:22
标题: 想破头了,记事本查找最大的数字
记事本里都是 1-2.044 2-3.044 3-5.044 4-2.084 5-2.44 5-6.02 3-5.404
这样的数字而且没有规律,。应该怎么做才能取的最大数字,要求是5开头的 取的是5以后的最大列数字,是一段数字比如5-6.02 5-2.44 比较出来的是5-6.02 并显示出来
[
Last edited by dragonamd on 2008-8-23 at 02:25 AM ]
作者: moniuming
时间: 2008-8-23 11:26
如果是一行一串数字,像下面这样的,请试试这个:
Quote: |
1-2.044
2-3.044
3-5.044
4-2.084
5-2.44
5-6.02
3-5.404 |
|
@echo off
for /f "tokens=1,2 delims=-" %%a in (a.txt) do (
if "%%a"=="5" (call set str=%%str%% %%b)
)
for %%a in (%str%) do (
set n=1
for %%b in (%str%) do (if %%a gtr %%b set /a n+=1)
call set _%%n%%=%%a
)
call echo 5-%%_%n%%%
pause
作者: pusofalse
时间: 2008-8-23 11:32
@echo off
for /f "delims=" %%a in ('findstr "^5" a.txt') do (
set "var= %%a"
call,set "_%%var:~-8%%=%%a"
)
for /f "tokens=2 delims==" %%i in ('set _') do set "max=%%i"
echo %max%
pause
[
Last edited by pusofalse on 2008-8-23 at 11:45 AM ]
作者: dragonamd
时间: 2008-8-23 12:39
pusofalse 大哥的代码好用了一点,不过还是有缺陷,显示出来的是一行,呵呵
5-2.44 3-5.144
5-6.02 3-5.444
3-5.404 5-7.244
这样的格式就检测不出了 还有下次我要自己定义检测头一个字母应该怎么修改
作者: pusofalse
时间: 2008-8-23 12:43
你是说一行当中有两列?
作者: dragonamd
时间: 2008-8-23 12:50
很多列,至少有7-8列左右吧
作者: pusofalse
时间: 2008-8-23 12:58
只要第一列的第一个数字是5,并且第一列5之后的数值是最大,就把这整行输出,我的理解对吗?
作者: dragonamd
时间: 2008-8-23 13:09
不是取出一整行 就取出5-7.244 这样的就行
不是第一列的头一个数字而是全部,。取的确实是5-之后的
作者: pusofalse
时间: 2008-8-23 13:13
建议把实际的样本贴上来,并把要提取的部分高亮标示。
作者: dragonamd
时间: 2008-8-23 13:21
pusofalse
大哥有QQ吗? 在QQ上聊轻松点 等搞好了,在贴上来
作者: pusofalse
时间: 2008-8-23 13:24
- -||||贴上来解决
作者: HAT
时间: 2008-8-23 13:29
文本内容很机密吗?咋就舍不得贴出来呢?
作者: dragonamd
时间: 2008-8-23 13:33
R02 u70.843 i-19.91 5-10.17 I5.641
U71.796 B-18.487 5-8.11 I4.556
G75.13 H-10.666 5-9.16 I-9.209
F75.13 5-7.27 H-10.666 I-9.209
上面的这段中,5-以后的10.17数字最大了,就显示5-10.17
HAT大哥说的严重了,。文本不机密, 只是不会在论坛上标示高亮,所以一点点搞,呵呵
[
Last edited by dragonamd on 2008-8-23 at 01:37 PM ]
作者: pusofalse
时间: 2008-8-23 13:54
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
for %%i in (%%a) do (
set "var=%%i"
if "!var:~,1!" equ "5" (
set "var= !var!"
set "_!var:~-10!=%%i"
)
)
)
for /f "tokens=2 delims==" %%i in ('set _') do set "max=%%i"
echo %max%
pause
作者: slore
时间: 2008-8-23 14:12
@echo off&Setlocal Enabledelayedexpansion
Set MV=0
for /f "delims=" %%i in (T.txt) do (
Set L=%%i
Set L=!L:5-=轩!
Call :MaxValue "!L!"
)
pause>nul
exit /b
:MaxValue
Set L=%1
for /f "tokens=2 delims=轩" %%i in (%L%) do (
for /f "delims= " %%j in ("%%i") do (
rem 因为不支持浮点运算所以用GTR没有得到正确结果,自己改吧。
rem If %%j GTR !MV! Set MV=%%j
echo %%j
)
)
作者: dragonamd
时间: 2008-8-23 15:19
pusofalse 大哥的代码确实好用,。但是以后定义不是5开头了怎么做,。现在是5-
的 上面的代码中有H- 字母的话应该改那里?
作者: pusofalse
时间: 2008-8-23 15:31
把 if "!var:~,1!" equ "5" (
改为if "!var:~,1!" equ "H" (
如果不区分大小写
if /i "!var:~,1!" equ "h" (
作者: dragonamd
时间: 2008-8-23 15:41
怎么看着就改了一个H呀!!!我太菜了,努力学习 如果取最小值呢 我指的是同时显示2个,一个最小的,一个最大的
试用了一下 100MB的文本,core CPU Q6600 ,要半小时 呵呵
[
Last edited by dragonamd on 2008-8-23 at 03:52 PM ]