标题: [文本处理] 批处理如何找出文本中的相同内容并找出重复了多少次 [打印本页]
作者: vip258124329 时间: 2009-7-19 22:53 标题: 批处理如何找出文本中的相同内容并找出重复了多少次
有一文本文档,里面装的是N个电话号码,然后有些电话号码是重复的,
现在就是要把那些重复的号码找出来,并找出重复了多少次。
在此请高手赐教。
最好能给个那种直接保存就能用的代码
我是新手 太新了
还请见谅啊
感激不尽了
附件如下。
作者: zhouyongjun 时间: 2009-7-19 23:27
- @echo off
- for /f %%i in (_find.txt) do if defined _%%i (set/a _%%i+=1) else (set/a _%%i=0)
- for /f "tokens=1,2 delims=_=" %%i in ('set _') do if %%j neq 0 echo %%i重复%%j次
- pause
复制代码
作者: namejm 时间: 2009-7-19 23:39
演示代码,没有把结果导出到文本中,若需要把结果导出文本文件,请跟帖说明:- @echo off
- setlocal enabledelayedexpansion
- set Phone=
- set repat=1
- for /f %%i in ('sort find.txt') do (
- if "!Phone!"=="%%i" (
- set /a repeat+=1
- ) else (
- if !repeat! gtr 1 echo 电话号码 !Phone! 出现了 !repeat! 次
- set repeat=1
- )
- set Phone=%%i
- )
- if !repeat! gtr 1 echo 电话号码 !Phone! 出现了 !repeat! 次
- pause
复制代码
作者: youxi01 时间: 2009-7-19 23:51
LS的if defined检验似乎并没有起到多大的作用,可以省略,效率略高- @echo off
- for /f %%i in (find.txt) do set/a _%%i+=1
- for /f "tokens=1,2 delims=_=" %%i in ('set _') do if %%j neq 1 echo %%i重复%%j次
- 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://bathome.net./) |
Powered by Discuz! 7.2 |