Board logo

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

作者: lxningbat    时间: 2012-10-17 10:47     标题: [已解决]BAT脚本如何显示文本中重复出现的内容?

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

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

即显示  02 03 04


怎么去查找对比?
作者: mxxcgzxxx    时间: 2012-10-17 10:56

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

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

不过你的是固定三列吗?如果不是就要用双FOR
作者: lxningbat    时间: 2012-10-17 11:16

回复 2# mxxcgzxxx


    感谢你的思路!这里面不只三行,可能会有十几行或更多,由于学学艺不精只懂很基础的for,转成函数啥的不懂,还请指点!
作者: 乱码    时间: 2012-10-17 11:43

  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没办法、
作者: wc726842270    时间: 2012-10-17 13:34

本以为仅是在群里问呢,还是在发一下吧
[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的方法,应该没什么问题,一开始也想用数组了,
作者: lxningbat    时间: 2012-10-17 14:30

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

回复 5# wc726842270


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

回复 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,不过效果不错,而且可以按要求任意扩展、




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