试图找到两个文本文件之间的常见和不常见 [英] Trying to find common and not common between two text files

查看:82
本文介绍了试图找到两个文本文件之间的常见和不常见的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个文本文件如下:
$


文件1:



AC1-0002A,点唱机,1149473,标记为满,202,M,0,,0,0
$
AC1-0003A,自动点唱机,1260463,标记未满,204,M,0,,0,0

AC1-0003B,Jukebox,1258468,标记为满,205,M,0,0,0¥b $ b AC1-0001A,Jukebox,1111111,标记未满,201,M,0 ,, 0,0

AC1-0004A,Jukebox,1258439,标记为满,206,M,0,0,0,
AC1-0005A,Jukebox,221460,标记未满,208,M,0,0,0

AC1-0005B,Jukebox,546985,标记未满,209,M,0,,0,0¥b $ b AC1-0006A,Jukebox,1258468,标记未满,211,M,0,0,0,


$
文件2:



AC1-0002A,Jukebox,1149473,标记为满,202,M,0,0,0¥b $ b AC1-0003A,点唱机,1262454,标记未满,204,M,0,,0,0

AC1-0003B,点唱机,1258468,标记为满,205,M,0,,0,0

AC1-0004A,Jukebox,1258439,标记为满,206,M,0,0,0¥b $ b AC1-0004B,Jukebox,221460,标记未满,208,M,0 ,, 0,0

AC1-0005B,Jukebox,547234,标记未满,209,M ,0,,0,0

AC1-0006A,Jukebox,1260231,标记未满,211,M,0,0,0¥b $ b AC1-0006B,点唱机,1258468,标记未满,211,M,0,0,0




预计结果:



AC1-0003A,Jukebox,1260463,标记未满,204,M,0,,0,0,AC1-0003A,Jukebox,1262454,标记未满,204,M,0 ,, 0,0

AC1-0001A,Jukebox,1111111,标记未满,201,M,0,,0,0 ,,,,,,,,,,¥ b $ b AC1-0005A,Jukebox,221460,标记未满,208,M,0 ,, 0,0 ,,,,,,,,,,,
AC1-0005B,Jukebox,546985 ,标记未满,209,M,0,,0,0,AC1-0005B,Jukebox,547234,标记未满,209,M,0,,0,0

AC1-0006A, Jukebox,1258468,标记未满,211,M,0,,0,0,AC1-0006A,Jukebox,1260231,标记未满,211,M,0,,0,0¥b $ b, ,,,,,,,,,, AC1-0006B,Jukebox,1258468,Marked Not Full,211,M,0,,0,



我提出了以下内容,但没有得到预期的结果:



strHeaderFile  = QUOT;文件1"

strOrderFile = QUOT;文件2"

strOutputFile = QUOT;的Result.txt"

strContents中= QUOT;"

Const intForReading = 1

设置objFSO = CreateObject(" Scripting.FileSystemObject")

设置objHeaderFile = objFSO.OpenTextFile(strHeaderFile,intForReading,错误)

而不是objHeaderFile.AtEndOfStream

      strHeaderLine = objHeaderFile.ReadLine

      strHeaderOrdNum =拆分(strHeaderLine,",")(0)

      strVolStatN  =拆分(strHeaderLine,&,",")(3)

     设置objOrderFile = objFSO.OpenTextFile(strOrderFile,intForReading,False)

     而不是objOrderFile.AtEndOfStream

            strOrderLine = objOrderFile.ReadLine

            strOrderOrdNum =分段(strOrderLine,",")(0)

            strVolStatO  =拆分(strOrderLine,",")(3)


            
$
'========================================= =======================
$
           ; 如果strOrderOrdNum = strHeaderOrdNum并且strVolStatN ="标记为未满"然后是
                  

                 如果strContents中= strOrderLine然后



              &NBSP ;         strContents中= QUOT;"

                 否则

                    &NBSP ;   strContents = strContents& VbCrLf& strOrderLine  &安培; "," &安培; strHeaderLine

                    &NBSP ;结束如果 
$


         否则 

            

           如果strHeaderOrdNum<> strOrderOrdNum然后   

                 如果strContents<>空然后


&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP; strContents = strContents& VbCrLf& strOrderLine& " ,,,,,,,,,"


                    &NBSP;&NBSP;否则


&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP; strContents中=没什么

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;结束如果是
                     &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;结束如果



           结束如果

'======================================= ================================================
$
                   

      Wend



$
      objOrderFile.Close

     设置objOrderFile = Nothing

Wend

wscript.echo strContents

objHeaderFile.Close

设置objHeaderFile = Nothing



'现在输出最终文件

设置objOutputFile = objFSO.CreateTextFile(strOutputFile,True)

objOutputFile.Write strContents

objOutputFile.Close

Set objOutputFile = Nothing

Set objFSO = Nothing



请帮帮我。

谢谢你
Shaikh S. Haque

I have two text files as follows:

File1:

AC1-0002A,Jukebox,1149473,Marked Full,202,M,0,,0,0
AC1-0003A,Jukebox,1260463,Marked Not Full,204,M,0,,0,0
AC1-0003B,Jukebox,1258468,Marked Full,205,M,0,,0,0
AC1-0001A,Jukebox,1111111,Marked Not Full,201,M,0,,0,0
AC1-0004A,Jukebox,1258439,Marked Full,206,M,0,,0,0
AC1-0005A,Jukebox,221460,Marked Not Full,208,M,0,,0,0
AC1-0005B,Jukebox,546985,Marked Not Full,209,M,0,,0,0
AC1-0006A,Jukebox,1258468,Marked Not Full,211,M,0,,0,0


File2:

AC1-0002A,Jukebox,1149473,Marked Full,202,M,0,,0,0
AC1-0003A,Jukebox,1262454,Marked Not Full,204,M,0,,0,0
AC1-0003B,Jukebox,1258468,Marked Full,205,M,0,,0,0
AC1-0004A,Jukebox,1258439,Marked Full,206,M,0,,0,0
AC1-0004B,Jukebox,221460,Marked Not Full,208,M,0,,0,0
AC1-0005B,Jukebox,547234,Marked Not Full,209,M,0,,0,0
AC1-0006A,Jukebox,1260231,Marked Not Full,211,M,0,,0,0
AC1-0006B,Jukebox,1258468,Marked Not Full,211,M,0,,0,0


Expected result:

AC1-0003A,Jukebox,1260463,Marked Not Full,204,M,0,,0,0,AC1-0003A,Jukebox,1262454,Marked Not Full,204,M,0,,0,0
AC1-0001A,Jukebox,1111111,Marked Not Full,201,M,0,,0,0,,,,,,,,,,
AC1-0005A,Jukebox,221460,Marked Not Full,208,M,0,,0,0,,,,,,,,,,
AC1-0005B,Jukebox,546985,Marked Not Full,209,M,0,,0,0,AC1-0005B,Jukebox,547234,Marked Not Full,209,M,0,,0,0
AC1-0006A,Jukebox,1258468,Marked Not Full,211,M,0,,0,0,AC1-0006A,Jukebox,1260231,Marked Not Full,211,M,0,,0,0
,,,,,,,,,,AC1-0006B,Jukebox,1258468,Marked Not Full,211,M,0,,0,0


I have come up with follows, but not getting the expected result:

strHeaderFile  = "File1"
strOrderFile = "File2"
strOutputFile = "RESULT.TXT"
strContents = ""
Const intForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objHeaderFile = objFSO.OpenTextFile(strHeaderFile, intForReading, False)
While Not objHeaderFile.AtEndOfStream
      strHeaderLine = objHeaderFile.ReadLine
      strHeaderOrdNum = Split(strHeaderLine, ",")(0)
      strVolStatN  = Split(strHeaderLine, ",")(3)
      Set objOrderFile = objFSO.OpenTextFile(strOrderFile, intForReading, False)
      While Not objOrderFile.AtEndOfStream
            strOrderLine = objOrderFile.ReadLine
            strOrderOrdNum = Split(strOrderLine, ",")(0)
            strVolStatO  = Split(strOrderLine, ",")(3)
            
' ==============================================================
            If strOrderOrdNum = strHeaderOrdNum and strVolStatN = "Marked Not Full" Then
                  
                  If strContents = strOrderLine Then

                        strContents = ""
                  Else
                        strContents = strContents & VbCrLf & strOrderLine  & "," & strHeaderLine
                      End If  

          Else  
            
            If strHeaderOrdNum <> strOrderOrdNum Then   
                  If strContents <> null Then
                        strContents = strContents & VbCrLf & strOrderLine & ",,,,,,,,,"
                      else
                        strContents = nothing
                        end if
                              End if

            End If
' =======================================================================================
                   
      Wend


      objOrderFile.Close
      Set objOrderFile = Nothing
Wend
wscript.echo strContents
objHeaderFile.Close
Set objHeaderFile = Nothing

' Now output the final file
Set objOutputFile = objFSO.CreateTextFile(strOutputFile, True)
objOutputFile.Write strContents
objOutputFile.Close
Set objOutputFile = Nothing
Set objFSO = Nothing

Please help me out.
Thanks
Shaikh S. Haque

推荐答案

区别在于头文件有一行不在订单文件中退出&NBSP;为了应对这种差异,如果发生这种情况:

The difference is that the header file has a line that does not exit in the order file.  To cope with this difference, then if this happens:

           如果strHeaderOrdNum<> strOrderOrdNum然后 

            If strHeaderOrdNum <> strOrderOrdNum Then 

然后您需要设置一个标志变量,以便您可以在此行之前对其进行测试:

then you need to set a flag variable so that you can test it before this line:

    &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; strOrderLine = objOrderFile.ReadLine

            strOrderLine = objOrderFile.ReadLine

下一次,并跳过该行,以便不使用文件中的下一行,而是使用当前值strOrderLine。

the next time around, and skip that line, so that instead of getting the next line from the file, the current value strOrderLine is used.

strHeaderFile  =" File1"

strOrderFile =" File2"

strOutputFile =" RESULT.TXT"

strContents =""

Const intForReading = 1

Dim ReadNextOrder as Boolean = True

设置objFSO = CreateObject(" Scripting.FileSystemObject")

设置objHeaderFile = objFSO.OpenTextFile(strHeaderFile,intForReading,False)

而不是objHeaderFile.AtEndOfStream

      strHeaderLine = objHeaderFile.ReadLine

      strHeaderOrdNum =拆分(strHeaderLine,",")(0)

      strVolStatN&NBSP; =拆分(strHeaderLine,&,",")(3)

     设置objOrderFile = objFSO.OpenTextFile(strOrderFile,intForReading,False)

     而不是objOrderFile.AtEndOfStream

           如果是ReadNextOrder则为
                strOrderLine = objOrderFile.ReadLine

           结束如果

            ReadNextOrder = True

            strOrderOrdNum =拆分(strOrderLine,",")(0)

            strVolStatO&NBSP; =拆分(strOrderLine,&,",")(3)


           如果strOrderOrdNum = strHeaderOrdNum并且strVolStatN ="标记为未满"然后是
                 如果strContents中= strOrderLine然后

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP; strContents中= QUOT;"

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;否则

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; strContents = strContents& VbCrLf& strOrderLine&NBSP; &安培; "," &安培; strHeaderLine

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;结束如果 


         其他            


           如果strHeaderOrdNum<> strOrderOrdNum然后   

                  ReadNextOrder = False

                 如果strContents<> null然后


                   &NBSP;&NBSP;&NBSP;&NBSP;&NBSP; strContents = strContents& VbCrLf& strOrderLine& " ,,,,,,,,,"


                    &NBSP;&NBSP;否则


&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP; strContents中=没什么

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;结束如果是
                     &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;结束如果是
           结束如果                


      Wend



请注意,这取决于两个文件之间的差异。您的代码不允许两个文件之间存在其他可能的差异。

strHeaderFile  = "File1"
strOrderFile = "File2"
strOutputFile = "RESULT.TXT"
strContents = ""
Const intForReading = 1
Dim ReadNextOrder as Boolean = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objHeaderFile = objFSO.OpenTextFile(strHeaderFile, intForReading, False)
While Not objHeaderFile.AtEndOfStream
      strHeaderLine = objHeaderFile.ReadLine
      strHeaderOrdNum = Split(strHeaderLine, ",")(0)
      strVolStatN  = Split(strHeaderLine, ",")(3)
      Set objOrderFile = objFSO.OpenTextFile(strOrderFile, intForReading, False)
      While Not objOrderFile.AtEndOfStream
            If ReadNextOrder Then
                strOrderLine = objOrderFile.ReadLine
            End If
            ReadNextOrder = True
            strOrderOrdNum = Split(strOrderLine, ",")(0)
            strVolStatO  = Split(strOrderLine, ",")(3)
            If strOrderOrdNum = strHeaderOrdNum and strVolStatN = "Marked Not Full" Then
                  If strContents = strOrderLine Then
                        strContents = ""
                  Else
                        strContents = strContents & VbCrLf & strOrderLine  & "," & strHeaderLine
                      End If 
          Else             
            If strHeaderOrdNum <> strOrderOrdNum Then   
                  ReadNextOrder = False
                  If strContents <> null Then
                        strContents = strContents & VbCrLf & strOrderLine & ",,,,,,,,,"
                      else
                        strContents = nothing
                        end if
                              End if
            End If                
      Wend

Note that this depends on the difference between the two files being as per your example. Your code does not allow for other possible differences between the two files.


这篇关于试图找到两个文本文件之间的常见和不常见的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆