[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-062】找出文本中内容完全相同的列

出题目的:
    强化字符处理能力;
    复习变量赋值法。
解题要求:
    代码简洁、高效;
    不生成临时文件。
加分原则:
    代码技术含量高,技巧出众的加技术分1分;
    pb加分上限20分(本主题同一id各贴累计),视代码精悍程度加分;
    批处理新人积极参与解题或讨论的可获额外参与奖励2pb(本主题同一id各贴累计)。
题目如下:
    有一文本a.txt(见附件)共50行50列(以tab为列分隔符),其中每行每列的字符串是由a-z以及空格、_、
#、$、.30个字符组合而成的,现知道其中有若干列的内容是相同的,要求找出各自相同的列组合并输出其共
同的内容,在这其中要注意如下的两列是不能视为内容相同(眼睛是可以判断出,但代码中就要考虑了):
    abc     abc
    m_空格  m_
    k $      空格k$
链接: https://pan.baidu.com/s/1AI27WrBgDbfMGgXEN7IIXg?pwd=ybun
----------------------------------------------------------------------------------------------------------------------------------------
代码运行标准输出(含升序处理):
  1. 5列 12列内容相同,列内容如下:
  2. fh xs|r|_cwq|unrjh|ebbk|bm|tv|_yy|a $z|onph|unw|ms|xi|dv|vcsya|t|s._|i|f|titm$|
  3. ioz|h_|n.b|wv_m|su|bmi| h_|paxvv|zzl|rsqiy|b|fp|nqdm.|_no|q|b|d.|lf|d in|pl|..cx
  4. |tui|woe|yst|rkpnq|z|.wwo|wyq|zwch|nisle
  5. 9列 26列内容相同,列内容如下:
  6. i|lgxeo|ybfep|as| rp| trzl|gc|chr|gj|b|a.n|q|f|v|e|hzwwl|aw|_zjet|o|_|j|f|zepyn
  7. |$.ma|s|ocdvw|jep|ud|x|pmu|ywlni|$wnle| bflz|wciuq|o|fr og|.$amq|ub|qkqh|g|f|s.x
  8. |g|xc|em|mc|c|o|ajb|as
  9. 18列 31列内容相同,列内容如下:
  10. hok|_z |va|mi|h.x$|u|s|k_|almdx|kkp|j|t|$aeg|yvn|se r|ylw|dzv|so_|ltn|vtokb|yyf
  11. c|a|ql.n|uom|mouvn|fbgr|_|.sid|b|dpb|rrnb$|__fay|d|ewck|w |q|na|ecoj|r_h|h|l|i|x
  12. l|ame|x$|ynin_|cq|hc$l|$.io|gnigp
  13. 38列 41列 47列内容相同,列内容如下:
  14. eez|yq|fgbq|aeazh|k.u|phnw|byj$|ke|onr.q|a pum|frf|qem$t|qpskt|vqpto|nwm|qm yx|
  15. vyw|szrc|xfcee|_|xfx|x$sxu|l|iw|hg|je$rr|yj|vr |i.alj|ew|hio|y|iz|bw|ctl|kvbzi|j
  16. fp|bm|qvuyt|yioz |fs|vvi$|iq t|vo|e|pv|t|hxkqe|sayds|c
复制代码
***共同提高***

回复 2楼 的帖子

就是找出a.txt中完全相同的列,这有可能是3 5 12列相同,同时21 49列相同,输出其共同的内容即为输出这些相同列的内容(在一行内输出,中间用|格开)。

[ 本帖最后由 batman 于 2011-3-10 19:15 编辑 ]
***共同提高***

TOP

新手可以先尝试着生成a.txt这样的文本,有助于打开解题思路。。。
***共同提高***

TOP

回复 6楼 的帖子

理解错误,难道这题这么难理解!
***共同提高***

TOP

回复 9楼 的帖子

题意还只有你理解对了,但结果不正确,请修改。。。

[ 本帖最后由 batman 于 2011-3-10 19:05 编辑 ]
***共同提高***

TOP

回复 8楼 的帖子

题意还是没有理解对,难道我表达能力这么差!题目是要找出a.txt中所有彼此相同的列啊。。。

[ 本帖最后由 batman 于 2011-3-11 00:16 编辑 ]
***共同提高***

TOP

回复 12楼 的帖子

重要也是最难点就是列出这些相同的列组,请继续修改
***共同提高***

TOP

少用set *和|findstr这样的语句,太影响效率了。。。

既然有人用上了退格,是不是可以考虑多行回退,呵呵。。。

[ 本帖最后由 batman 于 2011-3-11 12:40 编辑 ]
***共同提高***

TOP

效率总还是问题

  1. @echo off&setlocal enabledelayedexpansion
  2. set "t=%time%"
  3. for /f "delims=" %%a in (a.txt) do (
  4.   set /a m=0,n+=1
  5.   set "str=%%a"&set "str=!str: =空!"
  6.   for %%a in (!str!) do (
  7.     set /a m+=1
  8.     for %%b in (!m!) do (
  9.       set "_%%b=!_%%b!|%%a"
  10.         if !n! equ 50 (
  11.           for %%c in (!_%%b!) do (
  12.              if not defined %%c (
  13.                set "%%c=%%b列"
  14.                ) else (
  15.                if defined .%%c (
  16.                  for /f "tokens=2 delims=列 " %%d in ("!.%%c!") do set "..%%d=!..%%d! %%b列"
  17.                    ) else (
  18.                    set "..%%b=!%%c! %%b列"&set ".%%c=!..%%b!"
  19.                  )
  20.                )
  21.              )
  22.            )
  23.        )
  24.    )
  25. )
  26. for /l %%a in (1,1,%m%) do (
  27.     if defined ..%%a (
  28.        set "str=!_%%a:~1!
  29.        echo !..%%a!内容相同,列内容如下:
  30.        echo !str:空= !&echo.
  31.     )
  32. )
  33. echo %t%
  34. echo %time%
  35. pause>nul
复制代码
***共同提高***

TOP

返回列表