中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-22 07:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用批处理列举水产品的最低、最高价 查看 3,724 回复 16
16 发表于 2007-01-14 01:15 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  13楼和15楼的代码思路确实不错。但是在 for 语句中使用管道会使速度降低不少,15楼抛弃了管道操作,速度马上上去了。

  本来想发一段在13楼的基础上修正的代码,速度控制在15S以内,不过比起15楼的速度,还是稍微慢了点,就不发了。加分。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
17 发表于 2007-01-16 05:06 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
以下两个都产生临时文件
(里面加上了计时代码,可以自己对比所用时间,实际使用去掉)
“最低价: %%j %%k.%%l”中间用TAB制表符间隔“%%j”“%%k”

最快速度(仅限LZ提供的文件):
::zh159@bbs.cn-dos.net 2007-1-15
@echo off
title 水产最低价^&最高价 zh159@bbs.cn-dos.net 2007-1-15
setlocal EnableDelayedExpansion
:loop
set time1=%time%
if not "%time1:~-2%" == "00" goto loop
for /f "tokens=1-3*" %%i in (a.txt) do set %%j.%%i.%%k=.
for /f "tokens=1-3*" %%i in (a.txt) do if not "%%j" == "!Type!" set Type=%%j&&call :Scan %%j
del list.txt
echo %time1%
echo %time%
pause
exit

:Scan
set "%1">list.txt
set Min=M
set Max=0
for /f "tokens=1-4* delims==." %%i in (list.txt) do (
if %%k%%l LEQ !Min! set Min=%%k%%l
if %%k%%l GEQ !Max! set Max=%%k%%l
)
echo %1:
echo.
for /f "tokens=1-4* delims==." %%i in (list.txt) do if "%%k%%l" == "%Min%" echo 最低价: %%j %%k.%%l
for /f "tokens=1-4* delims==." %%i in (list.txt) do if "%%k%%l" == "%Max%" echo 最高价: %%j %%k.%%l
echo.------------------------------
goto :eof


最少变量:
::zh159@bbs.cn-dos.net 2007-1-15
@echo off
title 水产最低价^&最高价 zh159@bbs.cn-dos.net 2007-1-15
setlocal EnableDelayedExpansion
:loop
set time1=%time%
if not "%time1:~-2%" == "00" goto loop
for /f "tokens=1-3*" %%i in (a.txt) do if not "%%j" == "!Type!" set Type=%%j&&call :Scan %%j
del list.txt
echo %time1%
echo %time%
pause
exit

:Scan
cd.>list.txt
for /f "tokens=1-4* delims=. " %%i in (a.txt) do if "%%j" == "%1" >>list.txt echo %%i %%k %%l
set Min=M
set Max=0
for /f "tokens=1-4*" %%i in (list.txt) do (
if %%j%%k LEQ !Min! set Min=%%j%%k
if %%j%%k GEQ !Max! set Max=%%j%%k
)
echo %1:
echo.
for /f "tokens=1-4*" %%i in (list.txt) do if "%%j%%k" == "%Min%" echo 最低价: %%i %%j.%%k
for /f "tokens=1-4*" %%i in (list.txt) do if "%%j%%k" == "%Max%" echo 最高价: %%i %%j.%%k
echo.------------------------------
goto :eof
论坛跳转: