Board logo

标题: [文本处理] 【已解决】批处理如何利用行信息生成列目录 [打印本页]

作者: pan528    时间: 2013-5-30 15:14     标题: 【已解决】批处理如何利用行信息生成列目录

材料:含有各年期刊的行信息:
最高人民法院公报1985年第01期P22_樊明、刘希龙故意杀人、强奸案
最高人民法院公报1985年第01期P24_苏锋故意杀人案
最高人民法院公报1985年第01期P25_廖昌颐与廖抡万房产纠纷案
最高人民法院公报1985年第01期P27_南京市江浦县工程塑料厂与本厂成型车间承包合同纠纷案
最高人民法院公报1985年第02期P23_郭德宪劳改期间逃跑又犯罪被加重处罚案
最高人民法院公报1985年第02期P25_王平劳改期间立功被减刑案
最高人民法院公报1985年第02期P26_孙明亮故意伤害案
最高人民法院公报1985年第02期P29_何省昌与中国人民保险公司深泽县支公司财产保险合同纠纷案
最高人民法院公报1985年第03期P37_左成洪、李永泰、谢麟、吴自均以制造、贩卖有毒酒的危险方法致人伤亡案
最高人民法院公报1985年第03期P39_李荣辉、邓国劲、王平以制造、贩卖有毒酒的危险方法致人伤亡案
最高人民法院公报1985年第03期P41_格布·舍马克尔有限合伙公司与上海市对外贸易总公司随船债务转移纠纷案
最高人民法院公报1985年第03期P44_深圳市蛇口区环境监测站与香港凯达企业有限公司环境污染案
最高人民法院公报1985年第04期P28_华枝熙等与华宁熙等遗产继承案
最高人民法院公报1985年第04期P29_王贵学等三人与王远德继承案
最高人民法院公报1985年第04期P30_李福永、刘建新、杨文稿破坏电力设备案
最高人民法院公报1986年第01期P23_李金城等五人投机倒把、受贿案
最高人民法院公报1986年第01期P28_上海供电局与波罗的斯船务公司海事损害赔偿纠纷案
最高人民法院公报1986年第01期P29_玛丽娜维法航运公司与中国五金矿产进出口总公司滞期费纠纷案
最高人民法院公报1986年第02期P34_张常胜、叶之枫泄露国家重要机密、收受贿赂案
最高人民法院公报1986年第02期P36_阿利穆拉多夫·沙米利·哈吉—奥格雷劫持飞机案
最高人民法院公报1986年第02期P38_王爱英与李保生宅基纠纷强制执行案
最高人民法院公报1986年第03期P20_林桃森投机倒把案
最高人民法院公报1986年第03期P22_罗国庆、李仁光、陈耀坤、梁鸿杰、赵积林收受贿赂案
最高人民法院公报1986年第03期P26_潘凤才、史西文玩忽职守案
最高人民法院公报1986年第03期P28_安岳县元坝乡、努力乡一千五百六十九户稻种经营户与安岳县种子公司水稻制种购销合同纠纷案
最高人民法院公报1986年第04期P23_卢顺序、宁念慈、俞德孚特务案
最高人民法院公报1986年第04期P25_程国义、王金元、谷晋生、王恒茂玩忽职守案
最高人民法院公报1986年第04期P27_牛坨子村诉中国大冢制药有限公司(中日合资企业)临时用地纠纷案

生成各年期刊的列信息:
最高人民法院公报
1985年
第01期
南京市江浦县工程塑料厂与本厂成型车间承包合同纠纷案_P27
廖昌颐与廖抡万房产纠纷案_P25
樊明、刘希龙故意杀人、强奸案_P22
苏锋故意杀人案_P24
第02期
何省昌与中国人民保险公司深泽县支公司财产保险合同纠纷案_P29
孙明亮故意伤害案_P26
王平劳改期间立功被减刑案_P25
郭德宪劳改期间逃跑又犯罪被加重处罚案_P23
第03期
左成洪、李永泰、谢麟、吴自均以制造、贩卖有毒酒的危险方法致人伤亡案_P37
李荣辉、邓国劲、王平以制造、贩卖有毒酒的危险方法致人伤亡案_P39
格布·舍马克尔有限合伙公司与上海市对外贸易总公司随船债务转移纠纷案_P41
深圳市蛇口区环境监测站与香港凯达企业有限公司环境污染案_P44
第04期
华枝熙等与华宁熙等遗产继承案_P28
李福永、刘建新、杨文稿破坏电力设备案_P30
王贵学等三人与王远德继承案_P29
1986年
第01期
上海供电局与波罗的斯船务公司海事损害赔偿纠纷案_P28
李金城等五人投机倒把、受贿案_P23
玛丽娜维法航运公司与中国五金矿产进出口总公司滞期费纠纷案_P29
第02期
张常胜、叶之枫泄露国家重要机密、收受贿赂案_P34
王爱英与李保生宅基纠纷强制执行案_P38
阿利穆拉多夫·沙米利·哈吉—奥格雷劫持飞机案_P36
第03期
安岳县元坝乡、努力乡一千五百六十九户稻种经营户与安岳县种子公司水稻制种购销合同纠纷案_P28
林桃森投机倒把案_P20
潘凤才、史西文玩忽职守案_P26
罗国庆、李仁光、陈耀坤、梁鸿杰、赵积林收受贿赂案_P22
第04期
卢顺序、宁念慈、俞德孚特务案_P23
牛坨子村诉中国大冢制药有限公司(中日合资企业)临时用地纠纷案_P27
程国义、王金元、谷晋生、王恒茂玩忽职守案_P25
作者: CrLf    时间: 2013-5-30 16:49

这个文本里只有最高人民法院公报是吗?
作者: xxpinqz    时间: 2013-5-30 17:16

这类问题好像问有几次了,LZ自己不也懂批,应该可以自己写了。
不知道是不是这样的
老规矩:只测例子,未测附件,只供参考,不建议使用~~
  1. @echo off
  2. (for /f "tokens=1-4* delims=报年期_" %%a in ('sort a.txt') do (
  3.    if not defined %%a echo %%a报&set %%a=.
  4.    if not defined %%b echo %%b年&set %%b=.&for /f "delims==" %%i in ('set # 2^>nul') do set "%%i="
  5.    if not defined #%%c echo %%c期&set #%%c=.
  6.    echo %%e_%%d
  7. ))>b.txt
复制代码

作者: CrLf    时间: 2013-5-30 17:16

如果年份、期号、页码的位数都固定的话,比较好办,不然还要反复切割:
  1. @echo off
  2. set hh=^
  3. (for /f "delims=" %%a in ('sort b.txt') do (
  4. set str=%%a
  5. for /f "delims=0123456789" %%b in ("%%a") do (
  6. set 报纸=%%b
  7. setlocal enabledelayedexpansion
  8. set tmp=!str:*%%b=!
  9. set 年份=!tmp:~,5!
  10. set 期号=!tmp:~5,4!
  11. set 页码=!tmp:~9,3!
  12. set 案件=!tmp:*_=!
  13. for %%c in (报纸 年份 期号) do (
  14. if !last%%c! neq !%%c! (
  15. echo !%%c!
  16. set last%%c=!%%c!
  17. )
  18. )
  19. echo !案件!_!页码!
  20. for /f "delims=" %%b in ("last报纸=!last报纸!!hh!last年份=!last年份!!hh!last期号=!last期号!") do (
  21. endlocal
  22. set "%%b"
  23. )
  24. )
  25. ))>c.txt
  26. pause
复制代码

作者: pan528    时间: 2013-5-30 18:31

回复 3# xxpinqz

谢谢!压缩包的例子也通过了测试。
作者: pan528    时间: 2013-5-30 18:34

回复 4# CrLf


谢谢!crlf代码通用性很好,对多个不同报刊名的文本也能过。学习了。
作者: xxpinqz    时间: 2013-5-30 19:27

呵呵,意外呢,可以用~
要不同报刊多加个FOR清一下变量不就行了,当然了报刊结尾字符需是报字就是了。
通用难度感觉高了点,蹦出个第100期来呢?
高人就是不同,一出手就考虑通用性.目前还处于按题解题的阶段。
  1. @echo off
  2. (for /f "tokens=1-4* delims=报年期_" %%a in ('sort a.txt') do (
  3.    if not defined %%a echo %%a报&set %%a=.&for /f "delims==" %%i in ('set $ 2^>nul') do set "%%i="
  4.    if not defined $%%b echo %%b年&set $%%b=.&for /f "delims==" %%i in ('set # 2^>nul') do set "%%i="
  5.    if not defined #%%c echo %%c期&set #%%c=.
  6.    echo %%e_%%d
  7. ))>b.txt
复制代码

作者: pan528    时间: 2013-5-30 20:32

回复 4# CrLf

一年内出第100期的可能性不大,但“set 页码=!tmp:~9,3!”页码不一定全是二位数的,也可能是一位数的或是三位数,版主看看能否把这种情况考虑进去,调整一下代码?
作者: pan528    时间: 2013-5-30 20:36

本帖最后由 pan528 于 2013-5-30 20:39 编辑

回复 7# xxpinqz

谢谢修改代码,你俩的代码思路都不错。你这个代码,不存在页码的错误。但如果能考虑“报刊结尾字符不是报字”的情形,就完美了。因为报刊结尾除了报字外,还有其他可能。如“案例指导”等等。当然,这是额外的要求,我开始并没有交代清楚,请原谅。
作者: terse    时间: 2013-5-30 21:21

这样提高点通用性
不过 总有关键词的困扰
  1. @echo off&setlocal enabledelayedexpansion
  2. set file=b.TXT
  3. (for /f "tokens=1* delims=_" %%a in (%file%) do (
  4.     set str=%%a
  5.     for /f "tokens=1-3 delims=0123456789" %%i in ("%%a") do (
  6.         if "!s!" neq "%%i" set s=%%i&echo %%i
  7.         set "t=!str:*%%i=!"
  8.         set "t=!t:%%j= !"
  9.         for /f "tokens=1,2" %%m in ("!t:p= !") do (
  10.             if "!s1!" neq "%%m" set s1=%%m&echo %%m年
  11.             if "!s2!" neq "%%n" set s2=%%n&echo 第%%n
  12.         )
  13.     )
  14.     echo %%b_!str:*p=p!
  15. ))>c.txt
  16. PAUSE
复制代码

作者: pan528    时间: 2013-5-30 21:52

回复 10# terse
谢谢,你这个代码通用性强多了,克服了前面代码的缺陷。
关键字“年”、“第”选择的很准确,文本b生成时,注意提取就ok了。
谢谢各位高手相助!
作者: CrLf    时间: 2013-5-31 02:12

本帖最后由 CrLf 于 2013-5-31 02:14 编辑

回复 8# pan528


    已修改:
  1. @echo off
  2. set hh=^
  3. (for /f "delims=" %%a in ('sort b.txt') do (
  4.         set str=%%a
  5.         for /f "delims=0123456789" %%b in ("%%a") do (
  6.                 set 报纸=%%b
  7.                 setlocal enabledelayedexpansion
  8.                 set tmp=!str:*%%b=!
  9.                 set 年份=!tmp:~,5!
  10.                 set 期号=!tmp:~5,4!
  11.                 for /f "tokens=1* delims=_" %%c in ("!tmp:~9!") do set 页码=%%c
  12.                 set 案件=!str:*_=!
  13.                 for %%c in (报纸 年份 期号) do (
  14.                          if !last%%c! neq !%%c! (
  15.                                 echo !%%c!
  16.                                 set last%%c=!%%c!
  17.                         )
  18.                 )
  19.                 echo !案件!_!页码!
  20.                 for /f "delims=" %%b in ("last报纸=!last报纸!!hh!last年份=!last年份!!hh!last期号=!last期号!") do (
  21.                         endlocal
  22.                         set "%%b"
  23.                 )
  24.         )
  25. ))>c.txt
  26. pause
复制代码

作者: pan528    时间: 2013-5-31 07:02

谢谢修改!利用“_”前段最后位的特点,一个“!tmp:~9!”把页码的位数问题彻底解决了,佩服!




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