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

[文本处理] [已解决]BAT脚本如何显示文本中重复出现的内容?

本帖最后由 lxningbat 于 2012-10-18 20:57 编辑

如   1.txt  中有:
01 02 03
02 03 04
03 04 05

即显示  02 03 04


怎么去查找对比?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 6# lxningbat
Set oDic = CreateObject("Scripting.Dictionary")
Set fso = CreateObject("Scripting.FileSystemObject")
Set fin = fso.OpenTextFile("1.txt",1)
max =
0
'最高出现次数
While Not fin.AtEndOfStream
    data = Split(Trim(fin.ReadLine),
" ")
   
For i=0 To UBound(data)
        
If oDic.Exists(data(i)) Then
            
oDic(data(i)) = oDic(data(i))+1
            
If max<oDic(data(i)) Then max = oDic(data(i))
        
Else
            
oDic.Add data(i),1
        
End If
    Next
Wend
fin.Close

Set fout = fso.OpenTextFile("2.txt",2,1)
For Each x In oDic
   
If oDic(x)=max Then fout.Write x & " "
Next
fout.Close

MsgBox
"完成!"


水平不够,只会VBS,不过效果不错,而且可以按要求任意扩展、
1

评分人数

    • lxningbat: 非常感谢!同时还有batman!!技术 + 1
求老大赐我《精通正则表达式》

TOP

本帖最后由 lxningbat 于 2012-10-17 14:43 编辑

回复 5# wc726842270


    非常感谢二位! 4L的可能,5L大侠的能否只显示在一行?
现在又有一个新的问题,如刚才的:
01 02 03
02 03 04
03 04 05
在这里面03出现了3次,02 04各出现了2次,那么,只显示出现最高次数的那些呢?

TOP

本以为仅是在群里问呢,还是在发一下吧
[CODE]
@echo off
for /f "delims=" %%i in (1.txt) do (
        for %%j in (%%i) do (
                if not defined %%j (set %%j=#) else (if not defined a%%j (echo %%j&&set a%%j=1))
        )
)
pause
[/CDOE]
PS:4L的方法,应该没什么问题,一开始也想用数组了,
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

  1. Set oDic = CreateObject("Scripting.Dictionary")
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set fin = fso.OpenTextFile("1.txt",1)
  4. While Not fin.AtEndOfStream
  5.     data = Split(Trim(fin.ReadLine)," ")
  6.     For i=0 To UBound(data)
  7.         If oDic.Exists(data(i)) Then
  8.             oDic(data(i)) = oDic(data(i))+1
  9.         Else
  10.             oDic.Add data(i),1
  11.         End If
  12.     Next
  13. Wend
  14. fin.Close
  15. Set fout = fso.OpenTextFile("2.txt",2,1)
  16. For Each x In oDic
  17.     If oDic(x)>1 Then fout.Write x & " "
  18. Next
  19. fout.Close
  20. MsgBox "完成!"
复制代码
VBS代码,不会bat没办法、
求老大赐我《精通正则表达式》

TOP

回复 2# mxxcgzxxx


    感谢你的思路!这里面不只三行,可能会有十几行或更多,由于学学艺不精只懂很基础的for,转成函数啥的不懂,还请指点!

TOP

本帖最后由 mxxcgzxxx 于 2012-10-17 10:58 编辑

用FOR读取内容,转成函数,进行累计,最后显示大于1的函数名

不过你的是固定三列吗?如果不是就要用双FOR
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

返回列表