@echo off
title 公交线路信息查询器-test
setlocal enabledelayedexpansion
goto begin
功能:
① 输入线路名称,显示该线路的所有站点及发车收车时间;
② 输入上车站点和下车站点,显示可直达的车次,并显示每条线路中这两个站点及其之间的所有站点及发车收车时间;
③ 可查询换乘线路
流程:
1、输入查询对象;
2、判断输入类型:若为数字、数字+字母,则查询车次;若带汉字,则查询站点信息;
3、若查询车次,有则显示,无则提示重新查询;
4、若查询站点,首先检测是否存在此站点;若不存在,则提示换用近似的站点查询;若存在该站点,有直达则只显示直达,无直达则提示查询换乘;若无换乘,则提示重新查
询,此时罗列近似的起止站点供选择;
code by JM 2006-10-17~11-10 CMD@XP
:begin
cls
set input=
set /p input=请输入车次或上、下车站点:
:: 车次只允许输入数字或数字+字母,否则会认为是站点
echo %input%|findstr /r "^[0-9][0-9]*[a-zA-Z]*$">nul &&(
call :get_line %input%
echo !num!
echo !_time!
echo !line_info:~1,-1!
goto end
)
call :find_station %input%
rem ========== 查询车次编号匹配的线路信息 ==========
:get_line
:: 获取要查询的车次编号所在的行
cls
set line=
for /f "tokens=1* delims=:" %%i in ('findstr /nr "^%1路:$" 公交线路.txt') do (
set line=%%i
if not "!line!"=="" goto get_block
)
goto no-item
rem ========== 查询直达方案 ==========
:find_station
:: 只允许同时输入两个站点
if "%2"=="" goto begin
if not "%3"=="" goto begin
find "-%1-" 公交线路.txt>nul||goto no-start
find "-%2-" 公交线路.txt>nul||goto no-end
cls
set line=
set str=
set var=
for /f "tokens=1* delims=:" %%i in ('findstr /n "\-%1\-" 公交线路.txt') do (
set line=%%i
set str=%%j
set str=!str:-%2-=!
if not "!str!"=="%%j" (
set var=%%j
set var=!var:-%1-=-☆%1☆-!
set var=!var:-%2-=-☆%2☆-!
call :pick-up %input% !var!
call :type_nostop
)
)
:: 如果没找到直达线路,则查询换乘方案
if "%var%"=="" call :transfer %input%
:end
pause
goto begin
rem ========== 查询换乘方案 ==========
:: 换乘线路只能查到匹配的第一条,可能不是最短线路
:transfer
set first_line=
set first_id=
set first_time=
set second_line=
set second_id=
set second_time=
set link=
for /f "tokens=1* delims=:" %%i in ('findstr /n "\-%1\-" 公交线路.txt') do (
set first_line=%%i&set str_start=%%j
set stations_start=!str_start:-= !
for /f "tokens=1* delims=:" %%k in ('findstr /n "\-%2\-" 公交线路.txt') do (
set second_line=%%k&set str_end=%%l
set stations_end=!str_end:-= !
for %%m in (!stations_start!) do (
for %%n in (!stations_end!) do (
if "%%m"=="%%n" (
set link=%%m
set /a line=!first_line!-2&&call :get_block
set first_id=!num!
set first_time=!_time!
set /a line=!second_line!-2&&call :get_block
set second_id=!num!
set second_time=!_time!
goto type_change
)
)
)
)
)
if "%link%"=="" goto no-change
rem ━━━━━━━━━━━ 子过程 ━━━━━━━━━━━
rem ========== 获取某条线路的完整信息 ==========
:get_block
set /a line-=1
set count=
for /f "skip=%line%" %%i in (公交线路.txt) do (
set /a count+=1
if !count! equ 1 set num=%%i
if !count! equ 2 set _time=%%i
if !count! equ 3 set line_info=%%i
if !count! gtr 3 goto :eof
)
rem ========== 提取上车站点到下车站点之间的所有站点 ==========
:pick-up
for /f "tokens=2-4 delims=☆" %%i in ("%3") do set var=%%i%%j%%k
:: 判断输入的起止点在 公交线路.txt 中的先后顺序
:: 以决定是否逆向显示相关信息
for /f "tokens=1 delims=-" %%i in ("!var!") do if "%%i"=="%2" call :reverse
goto :eof
rem ========== 显示直达方案信息 ==========
:type_nostop
set /a line-=2
call :get_block
echo 乘坐 %num:~0,-2% 路车(%_time%):%var%
echo.
goto :eof
rem ========== 显示换乘方案信息 ==========
:type_change
echo 交汇点是 %link%
echo.
set str_start=!str_start:-%1-=-☆%1☆-!
set str_start=!str_start:-%link%-=-☆%link%☆-!
echo 先搭乘 %first_id:~0,-2% 路在 %link% 站下车,然后换乘 %second_id:~0,-2% 路即可,换乘方案为:
echo.
call :pick-up %1 %link% %str_start%
echo %first_id:~0,-2%路(%first_time%): %var%
set str_end=!str_end:-%2-=-☆%2☆-!
set str_end=!str_end:-%link%-=-☆%link%☆-!
echo.
call :pick-up %1 %2 %str_end%
echo %second_id:~0,-2%路(%second_time%): %var%
echo _____________________________________________________________
goto :eof
rem ========== 逆向显示站点信息 ==========
:reverse
set var=%var:-= %
set str=
for %%i in (%var%) do set str=%%i-!str!
set var=%str:~0,-1%
goto :eof
rem ━━━━━━━━━━━ 出错信息 ━━━━━━━━━━━
:no-start
cls
echo 没有找到名为 "%1" 的上车站点
pause
goto begin
:no-end
cls
echo 没有找到名为 "%2" 的下车站点
pause
goto begin
:no-change
echo 没有找到直达线路,也找不到只转一次车的换乘方案
pause
goto begin
:no-item
echo 没有找到车次编号为 "%input%" 的相关信息,请重新查阅.
pause
goto begin
线路信息格式为:
① 文本正文首行不能为线路信息,可以设为空,或其他内容;
② 每条线路第一行为线路编号,格式为"数字+路:"(如11路:)或 数字+字母+路:(如503A路:),必须是中文半角状态下的冒号;第二行为发、收车时间;第三行为经过的站点,每个站点用短横线括起来,(如:-川大-电子科大-);
③ 每条线路的信息块之间只能用空行分隔,或者不分隔;
④ 除了站点、时间之间用-分隔之外,其他行不能再出现-;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1路:
6:00-23:00
-青龙场中心站-昭觉寺横街-洪家坡-驷马桥-高笋桥-解放路一段-梁家巷-好又多府河店-北大街-中西顺城街-盐市口-红照壁-南大街-浆洗街-南郊路-武侯祠-高升桥-高升桥路中段-佳灵路-川藏路高新路口-太平园-八一家具城-
2路:
5:45-22:30
-火车北站-荷花池-高笋塘-二环路北四段-二环路东一段北-二环路东一段中-二环路东一段南-麻石桥-二环路东三段中-万年场-双林中横路-双桥子-塔子山-五桂桥-
3路:
6:15-23:00
-桦林园-红砖桥-沙河大桥-东光小区-二环路东五段-三官堂-顺江路-九眼桥-牛王庙-水碾河-东风大桥-大慈寺路-总府路东-文化宫-太升路口-青羊二医院-江汉路东-江汉路西-通锦桥-沙湾路-会展中心-西南交大-交大路西-香榭里-九里堤公交总站-
城乡3路:
6:30-18:30
-大丰镇-古柏树村五组-古柏树村四组-川建社区-陆家工业区-幸福村-园艺场-王贾村-九里店-八里桥-双水村-双水碾村-荆竹村-川陕路口-昭觉寺-青龙场-省粮校-省政法学院-成绵立交桥-龙潭立交桥-丛树林-十陵客运站-
4路:
5:50-23:00
-五桂桥-双桥子-水碾河-东风大桥-大慈寺路-总府路东-总府路-人民西路-东城根上街-羊市街-西大街-西月城街-花牌坊街-西门车站-营门口立交桥-五里村-茶店子-茶店子西-三环路成灌路立交桥南-茶店子公交站-
Originally posted by namejm at 2006-11-12 00:43: 顶楼的数据库是我按照《成都公交线路册》2006年版 手工录入的,没有上行和下行的区别;在火车网上下到了数据库文本,发现这里是分了上行和䠮..这个上行和下行是走了一个环线
@echo off
::定义数据库文件%life%
@set life=兰州公交线路.txt
:start
echo %~p0|find /i "Rar$">nul &&(echo 请把包内所有文件解压到文件夹下使用&pause>nul&goto :eof)
if not exist %life% (echo 错误,缺少数据库文件%life%&pause>nul&goto :eof)
del /f/q temp_?.txt>nul
title 兰州公交查询器 by:vkill
cls
echo.
echo ____请选择查询条件______________________________________________________________
echo.
echo a 按车次查询 b 按站点查询 c 按站-站查询
echo ________________________________________________________________________________
set cx_=
set /p cx_= 请输入操作代码:
for %%? in (a b c) do (if *%cx_%==*%%? goto cx_%%?)
goto start
::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
:cx_a
title 兰州公交查询器→按车次查询 by:vkill
cls
echo.
echo 例子:如查询7路,输入7即可
echo.
set cx_cc=
set /p cx_cc=请输入要查询的车次:
if *%cx_cc%==* goto cx_a
cd.>temp_0.txt
sed -n -e "/:%cx_cc%路/!d;p" -e "/:%cx_cc%路/n;p" -e h %life% |sed -e "/^ :/s/ :/车次→ /" -e "/^ :/!s/^ /线路→ /" |sed "n;G"|more>temp_0.txt
findstr . temp_0.txt>nul||(echo,&echo sorry,数据库中暂无此车次&pause>nul&goto start)
echo.
echo 你要查询的车次详情如下:
echo ________________________________________________________________________________
more<temp_0.txt
echo ________________________________________________________________________________
echo 按任意键退出......
pause>nul&goto start
::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
:cx_b
title 兰州公交查询器→按站点查询 by:vkill
cls
echo.
echo 例子:如输入 西关什字 查询
echo.
set cx_zd=
set /p cx_zd=请输入要查询的站点:
if *%cx_zd%==* goto cx_b
echo %cx_zd%|sed "s/[\x00-\x80]/,/" |findstr ",">nul&&(echo,&echo 错误,站点不是纯中文&pause>nul&goto cx_c)
::站-站查询时站1或站2为空
:*-*
cd.>temp_a.txt
cd.>temp_b.txt
sed -n -e "/ %cx_zd% /{x;1!p;g;p;}" -e h %life% |sed -e "/^ :/s/ :/车次→ /" -e "/^ :/!s/^ /线路→ /" |sed "n;G"|more>temp_a.txt
sed -n -e "/%cx_zd%/{x;1!p;g;p;}" -e h %life% |sed -e "/^ :/s/ :/车次→ /" -e "/^ :/!s/^ /线路→ /" |sed "n;G"|more>temp_b.txt
:匹配站点
findstr . temp_a.txt>nul ||(echo,&echo sorry,数据库中暂无完全匹配的此站点,2秒后显示类似的此站点&ping -n 3 127.1>nul&goto 类似站点)
echo.
echo 你要查询的站点(完全匹配的站点)详情如下:
echo ________________________________________________________________________________
more<temp_a.txt
echo ________________________________________________________________________________
echo 按任意键退出......
pause>nul&goto start
:类似站点
findstr . temp_b.txt>nul ||(echo,&echo sorry,数据库中暂无此站点,按任意键退出&pause>nul&goto start)
echo.
echo 你要查询的站点(类似的站点)详情如下:
echo ________________________________________________________________________________
more<temp_b.txt
echo ________________________________________________________________________________
echo 按任意键退出......
pause>nul&goto start
::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
:cx_c
title 兰州公交查询器→按站-站查询 by:vkill
cls
echo.
echo 例子:如输入 西关什字-南关什字 查询
echo.
set cx_zz=
set /p cx_zz=请输入要查询的站-站:
if *%cx_zz%==* goto cx_c
echo.
echo %cx_zz: =%|sed "s/-//" |sed "s/[\x00-\x80]/,/" |findstr ",">nul&&(echo 错误,站点不是纯中文&pause>nul&goto cx_c)
for /f "tokens=1-2 delims=-" %%a in ('echo %cx_zz% ^|sed "s/ //g"') do (
if *%%a==* (echo 站1为空,2秒后转到单站点查询&ping -n 3 127.1>nul&set "cx_zd=%%b"&goto *-*) else (set "s=%%a")
if *%%b==* (echo 站2为空,2秒后转到单站点查询&ping -n 3 127.1>nul&set "cx_zd=%%a"&goto *-*) else (set "e=%%b")
)
cd.>temp_a.txt
cd.>temp_b.txt
::正序查找
sed -n -e "/%s%.*%e%/{x;1!p;g;p;}" -e h %life% |sed "s/.*%s%/ %s%/;s/%e%.*/%e%/" |sed -e "/^ :/s/ :/车次→ /" -e "/^ :/!s/^ /线路→ /" |sed "n;G"|more>temp_a.txt
::反序查找
sed -n -e "/%e%.*%s%/{x;1!p;g;p;}" -e h %life% |sed "s/.*%e%/ %e%/;s/%s%.*/%s%/" |sed -e "/^ :/s/ :/车次→ /" -e "/^ :/!s/^ /线路→ /" |sed "n;G"|more>temp_b.txt
:正序查找的站点
findstr . temp_a.txt>nul ||(echo,&echo sorry,数据库中暂无正序的%s%站-%e%站,2秒后显示反序的%s%站-%e%站&ping -n 3 127.1>nul&goto 反序查找的站点)
echo.
echo 你要查询的正序%s%站-%e%站详情如下:
echo ________________________________________________________________________________
more<temp_a.txt
echo ________________________________________________________________________________
echo 按任意键继续......
pause>nul
:反序查找的站点
findstr . temp_b.txt>nul ||(echo,&echo sorry,数据库中暂无反序的%s%站-%e%站,按任意键退出&pause>nul&goto start)
echo.
echo 你要查询的反序%s%站-%e%站详情如下:
echo ________________________________________________________________________________
more<temp_b.txt
echo ________________________________________________________________________________
echo 按任意键退出......
pause>nul&goto start
goto :eof
@echo off
set "life=兰州公交线路.txt"
echo %~p0|find /i "Rar$">nul &&(echo 请把包内所有文件解压到文件夹下使用&pause>nul&goto :eof)
::利用http://www.huoche.com.cn来更新
ping www.huoche.com.cn>nul ||(echo sorry,网络不通&pause>nul&goto :eof)
del /f/q *.htm*>nul
if exist %life% (copy %life% backup_%life%)
>%life% echo ;兰州公交室内线路车次表
>%life% echo.
echo 正在下载数据库,请稍候......
::兰州市区线路的页面地址为11346--11443
for /l %%a in (11346,1,11443) do (wget -q "http://www.huoche.com.cn/b%%a/")
::显示车次行和路线行|去行开头和结尾所有空格、移除标签|替换市区线路 为: ,去掉所属公交公司|开头结尾各加 ,换(为 ( ,)为 )|把共几站的空格去掉 |more写入新文件
sed -n -e "/<h2>.*<\/h2>/{p}" -e "/<h2>.*<\/h2>/{n;n;p}" *.htm* |sed -e "s/^[ \t]*//;s/[ \t]*$//" -e "s/<...>//g;s/<..>//g" |sed "s/市区线路 /:/" |sed "s/^/ /;s/$/ /;s/(/ ( /g;s/)/ ) /g" |sed "s/( 共/(共/;s/站 )/站)/"|more>%life%
del /f/q *.htm*
echo 更新完成,老的数据保存在了backup_%life%中&pause>nul
goto :rof
附件 1:公交车次查询--例:兰州公交.rar (2006-11-12 05:18, 42.39 K, 下载附件所需积分 1点 ,下载次数: 150)
附件 2:wget.rar (2006-11-12 05:21, 268.83 K, 下载附件所需积分 1点 ,下载次数: 398)
Originally posted by everest79 at 2007-3-13 15:41: vkill是甘肃的吗?我也是哦vkill 金牌会员 积分 2742 发帖 1202 注册 2006-1-20 来自 甘肃.临泽 状态 在线
Originally posted by vkill at 2007-3-13 12:55 PM: vkill 金牌会员 积分 2742 发帖 1202 注册 2006-1-20 来自 甘肃.临泽 状态 在线分比我高也不用打击俺吗,我是陇南的
Originally posted by everest79 at 2007-3-14 10:02: 分比我高也不用打击俺吗,我是陇南的倒,谁打击你了啊~我只是想说我写的很清楚的啊