中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] »
作者:
标题: 高手们帮忙优化一下代码 上一主题 | 下一主题
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『楼 主』:  高手们帮忙优化一下代码

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


@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




代码是可以用的,。。如果在10MB的文本中,。执行效率慢的要死,,差不多要半个小时了,.VBS也行,总之能快就行

[ Last edited by dragonamd on 2008-9-12 at 05:10 AM ]

2008-9-12 04:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

代码的效率问题是出在set _上,修改如下:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
     for %%i in (%%a) do (
          set "var=%%i"
          if "!var:~,2!" equ "5-" (
             if not defined max set "max=!var:~2!"
             if !var:~2! geq !max! set "max=!var:~2!"   
          )
     )
)
echo %max%&pause>nul




批处理之家新域名:www.bathome.net
2008-9-12 11:16
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 3 楼』:  我晕,上面的没考虑浮点比较,修改如下


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
     for %%b in (%%a) do (
          set "var=%%b"
          if "!var:~,2!" equ "5-" (
             if not defined max set "max=!var:~2!"
             for /f "tokens=1* delims=." %%c in ("!max!") do set "max1=%%c"&set "max2=%%d"
             for /f "tokens=1* delims=." %%e in ("!var:~2!") do (
                 if %%e gtr !max1! (
                    set "max=!var:~2!"
                    ) else (
                    if %%e equ !max1! if %%d gtr !max2! set "max=!var:~2!"
         )
             )
          )
     )
)
echo %max%&pause>nul




批处理之家新域名:www.bathome.net
2008-9-12 11:39
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 4 楼』:  

借用S11S1代码写个vbs
set fso=createobject("scripting.filesystemobject")
set f=fso.opentextfile("a.txt",1)

while f.atendofstream <> true
  r=r&split(split(f.readline,"5-")(1))(0)&" " '提取所有5-后的数字
wend
r=split(r)                                    '转换为数组
n=ubound(r)                                   '确定数组最大下标
for i=0 to n-1                                '转换数值类型
        r(i)=cdbl(r(i))
next
quicksort r,0,n
msgbox r(n-1)

'快速排序:
'划分:
function partition(r,l,h)
        dim i,j,t
        i=l
        j=h
        t=r(i)'初始化,t为基准
        do
                while r(j)>=t and i<j
                        j=j-1'从右向左扫描,查找第1个小于t的数
                wend
                if i<j then
                        r(i)=r(j)'交换r(i)和r(j)
                        i=i+1
                end if
                while r(i)<=t and i<j
                        i=i+1'从左向右扫描,查找第1个大于t的数
                wend
                if i<j then
                        r(j)=r(i)'交换r(i)和r(j)
                        j=j-1
                end if               
        loop while i<>j
        r(i)=t'基准t已被最后定位
        partition=i
end function
        '排序:
sub quicksort(r,s1,t1)
        dim i
        if s1<t1 then'只有一个数或无数时无须排序
                i=partition(r,s1,t1)'对r(s1)到r(t1)做划分
                quicksort r,s1,i-1'递归处理左区间
                quicksort r,i+1,t1'递归处理右区间
        end if
end sub
[ Last edited by huahua0919 on 2008-9-12 at 01:06 PM ]

2008-9-12 12:54
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『第 5 楼』:  

代码都测试了,。不会加快 10MB的文本还是一样慢

2008-9-12 15:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

用 gawk 试试。。。

2008-9-12 15:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『第 7 楼』:  

不会写,

2008-9-13 02:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by dragonamd at 2008-9-13 02:37:
不会写,

不会写可以自己学习一下嘛。
gawk "{for (i=1;i<=NF;i++) { if($i~/^5-[0-9]/){ split($i,a,/-/); if(a[2]>max) max=a[2]; }}} END{print max}" your_file
[ Last edited by lxmxn on 2008-9-13 at 12:09 PM ]

2008-9-13 12:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『第 9 楼』:  

怎么运行了是没用的,实在不懂

2008-9-13 12:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

gawk 是一个工具,需要下载,网上搜搜吧。

我这里运行正常。

ps 建议看看置顶的批处理新手FAQ。

2008-9-13 12:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『第 11 楼』:  

不能P处理?

2008-9-14 00:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 12 楼』:  

可以批处理,但是根据你的要求,批处理效率不如gawk高。



2008-9-14 02:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『第 13 楼』:  

不知道那个工具怎么安装,使用

2008-9-14 19:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 14 楼』:  

不用安装,直接下在gawk.exe即可直接在批处理中调用,不会使用可以看帮助。



2008-9-14 19:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dragonamd
中级用户





积分 209
发帖 100
注册 2008-8-1
状态 离线
『第 15 楼』:  

在网上找了很久下载不到,。能提供下载一下吗?

2008-9-14 21:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: