Board logo

标题: [文本处理] [已解决]批处理如何根据文本生成分类菜单 [打印本页]

作者: lfoqtal    时间: 2011-7-29 14:47     标题: [已解决]批处理如何根据文本生成分类菜单

本帖最后由 lfoqtal 于 2011-7-29 17:25 编辑

文本内容如下有几百行,如何根据#号后的文字生成选择菜单,再根据选择显示相关内容
如,菜单一为:
1   市场
2   超市
菜单二为:
1楼
2楼
然后根据选择显示相应的行,
关键内容不是固定的,楼层也不相同有可能有4楼,所以想用批处理自动获取分类
A001=7854621#市场.2楼
A002=4874611#市场.1楼
A003=7854651#市场.2楼
A004=9541871#市场.1楼
A005=1214132#超市.2楼
A006=a454338#市场.3楼
A007=4554451#市场.3楼
A008=3214151#市场.1楼
A009=2344116#市场.2楼
A010=7857815#市场.3楼
A011=7884113#超市.2楼
A012=78541a4#超市.1楼
A013=7878131#市场.2楼
A014=78a4543#市场.1楼
A015=7771551#超市.2楼
A016=155a462#超市.1楼
A017=6441112#市场.2楼
A018=7454121#超市.1楼
A019=7447978#批发部.1楼
.
.
.

作者: tmplinshi    时间: 2011-7-29 15:11

没看懂。

是要生成“菜单一.txt”和“菜单二.txt”吗?按照什么规律来生成这两个文本?
作者: lfoqtal    时间: 2011-7-29 15:16

本帖最后由 lfoqtal 于 2011-7-29 15:24 编辑

回复 2# tmplinshi


    不是生成文本,是直接生成选择菜单,提示进行选择,类似
  1. echo 1 市场
  2. echo 2 超市
  3. set /p p=请选择
  4. if %p%==1 set p=市场
  5. if %p%==2 set p=超市
  6. cls
  7. echo 1楼
  8. echo 2楼
  9. set/p a=请选择
  10. findstr "#%p%.%a%楼" 1.txt
复制代码
固定的我会编但这样未知分类内容的就不太会了,不知怎么从重复的内容中只保留一项做为菜单
顺序无所谓只要不重复就行,还有要对应数据,比如超市只有1楼2楼4楼时只最示这三个
作者: 601997526    时间: 2011-7-29 16:19

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2,3 delims=#." %%i in (a.txt) do if not defined %%i (set /a n+=1&set a!n!=%%i&set %%i=1)
  4. for /l %%i in (1 1 !n!) do echo %%i !a%%i!
  5. set /p p=请选择
  6. for /l %%i in (1 1 !n!) do if %p%==%%i set p=!a%%i!
  7. echo %p%
  8. pause
复制代码

作者: tmplinshi    时间: 2011-7-29 17:16

本帖最后由 tmplinshi 于 2011-7-29 17:22 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set file="list.txt"
  4. set n=
  5. set menu1=
  6. :: ---------------------------
  7. set \n=^
  8. :: ---------------------------
  9. for /f "usebackq tokens=2,3 delims=#." %%a in (%file%) do (
  10.     if not defined #%%a (
  11.         set /a n += 1
  12.         set menu1=!menu1!!n! %%a!\n!
  13.         set name!n!=%%a
  14.         set #%%a=#
  15.     )
  16.     if not defined #%%a.%%b (
  17.         set #%%a.%%b=#
  18.     )
  19. )
  20. :menu1
  21. cls
  22. echo !menu1!
  23. set input1=
  24. set /p input1=请选择:
  25. if not defined input1 goto menu1
  26. if !input1! gtr %n% goto menu1
  27. if !input1! lss 0 goto menu1
  28. :menu2
  29. cls
  30. for /f "skip=1 tokens=2 delims=.=" %%a in (' set #!name%input1%! ') do echo %%a
  31. echo,
  32. set input2=
  33. set /p input2=请选择:
  34. if not defined input2 goto menu2
  35. cls
  36. findstr "#!name%input1%!.%input2%楼" %file%
  37. echo,
  38. pause
  39. goto menu1
复制代码

作者: lfoqtal    时间: 2011-7-29 17:27

感谢大家帮忙,
4楼的只能出第一层菜单,没有第二层所以无法使用
5楼的可以使用而且数据发生变化后可以适应,非常好




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2