试图找到两个文本文件之间的常见和不常见 [英] Trying to find common and not common between two text files
问题描述
我有两个文本文件如下:
$
文件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屋!