Board logo

标题: [文本处理] 批处理如何找出文本中的相同内容并找出重复了多少次 [打印本页]

作者: vip258124329    时间: 2009-7-19 22:53     标题: 批处理如何找出文本中的相同内容并找出重复了多少次

有一文本文档,里面装的是N个电话号码,然后有些电话号码是重复的,
现在就是要把那些重复的号码找出来,并找出重复了多少次。
在此请高手赐教。

最好能给个那种直接保存就能用的代码
我是新手  太新了
还请见谅啊

感激不尽了

附件如下。
作者: zhouyongjun    时间: 2009-7-19 23:27

  1. @echo off
  2. for /f %%i in (_find.txt) do if defined _%%i (set/a _%%i+=1) else (set/a _%%i=0)
  3. for /f "tokens=1,2 delims=_=" %%i in ('set _') do if %%j neq 0 echo %%i重复%%j次
  4. pause
复制代码

作者: namejm    时间: 2009-7-19 23:39

  演示代码,没有把结果导出到文本中,若需要把结果导出文本文件,请跟帖说明:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set Phone=
  4. set repat=1
  5. for /f %%i in ('sort find.txt') do (
  6.     if "!Phone!"=="%%i" (
  7.         set /a repeat+=1
  8.     ) else (
  9.         if !repeat! gtr 1 echo 电话号码 !Phone! 出现了 !repeat! 次
  10.         set repeat=1
  11.     )
  12.     set Phone=%%i
  13. )
  14. if !repeat! gtr 1 echo 电话号码 !Phone! 出现了 !repeat! 次
  15. pause
复制代码

作者: youxi01    时间: 2009-7-19 23:51

LS的if defined检验似乎并没有起到多大的作用,可以省略,效率略高
  1. @echo off
  2. for /f %%i in (find.txt) do set/a _%%i+=1
  3. for /f "tokens=1,2 delims=_=" %%i in ('set _') do if %%j neq 1 echo %%i重复%%j次
  4. pause
复制代码

作者: zhouyongjun    时间: 2009-7-20 00:06     标题: 回复 4楼 的帖子

确实如此,思维定势,多此一举了
不过JM的代码效率是高了很多,我测试了一下并不是多了一个for造成的,而是第一个for多了很多时间,与JM不同的是我的占用了很多变量在内存中。楼主文本中只有5000来条记录,效率就有了很大不同。看来以后要注意这方面了。
作者: vip258124329    时间: 2009-7-20 00:10

受教了
多谢各位大侠了

o(∩_∩)o...
作者: namejm    时间: 2009-7-20 00:12

  大量设置变量的做法十分耗费内存,是拖慢速度的主因,当变量越多,缺点越明显,尽可能得少设置变量,是提高速度的一大法宝。
作者: Lumiere    时间: 2009-7-20 12:14     标题: 回复 4楼 的帖子

似乎应该把代码中的“重复”改为“出现”吧?或者改为“重复了%%j-1次”。
作者: woai3003    时间: 2012-9-10 14:10

太好了,好好看看~谢谢楼上的朋友们
作者: woai3003    时间: 2012-9-10 14:23

不适合我哦,上面的基础上,怎样查找某个字 出现了几次呢? 小弟初学,如有会的朋友能答复就好了,先谢谢了




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