本帖最后由 Ziya 于 2010-7-29 11:57 编辑
想写一个对比文本文件的程序
自己动手完成了第一个版本
示例文本1
示例文本2
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#Include <File.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$ListView1 = GUICtrlCreateListView("", 16, 48, 233, 369)
_GUICtrlListView_InsertColumn($ListView1, 0, "文件名", 100)
_GUICtrlListView_InsertColumn($ListView1, 1, "行号", 100)
_GUICtrlListView_InsertColumn($ListView1, 2, "内容", 100)
$ListView2 = GUICtrlCreateListView("", 328, 48, 265, 369)
_GUICtrlListView_InsertColumn($ListView2, 0, "文件名", 100)
_GUICtrlListView_InsertColumn($ListView2, 1, "行号", 100)
_GUICtrlListView_InsertColumn($ListView2, 2, "内容", 100)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$path1="file1.txt"
$path2="file2.txt"
$file1 = FileOpen($path1)
$file2 = FileOpen($path2)
$i1 = _FileCountLines($path1)
FileDelete("bt.txt");删除临时文件
For $i = 1 To $i1
$line1 = FileReadLine($file1,$i)
$line2 = FileReadLine($file2,$i)
$b = StringCompare ($line1,$line2)
FileWrite("bt.txt",$b&@CRLF);将比较结果写入临时文件bt.txt
Next
$file3 = FileOpen("bt.txt")
$ii = _FileCountLines("bt.txt")
$g1 = 0
For $i = 1 To $ii
$d = FileReadLine($file3,$i);根据临时文件回显不同的行
If $d <> 0 Then
$t1 = FileReadLine($file1,$i)
$t2 = FileReadLine($file2,$i)
_GUICtrlListView_AddItem($ListView1,$path1,$g1)
_GUICtrlListView_AddSubItem($ListView1,$g1,$i,1)
_GUICtrlListView_AddSubItem($ListView1,$g1,$t1,2)
_GUICtrlListView_AddItem($ListView2,$path2,$g1)
_GUICtrlListView_AddSubItem($ListView2,$g1,$i,1)
_GUICtrlListView_AddSubItem($ListView2,$g1,$t2,2)
$g1 = $g1 + 1
EndIf
Next
FileClose($file1)
FileClose($file2)
FileClose($file3)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
思路是这样的
1.逐行读取文件1和文件2
2.比较字符串的差异,写入临时文件(bt.txt)中进行记录,行数和原始的文件1/2一一对应
3.读取临时文件,如果相同则跳过,如果不同($d <> 0)则回显原始文件1和2的对应行号
4.将回显内容写入listview1与listview2,按照"文件名|行号|内容"显示出来
运行结果为
现在问题来了
如果文本中包含空行
示例文本1
示例文本2
请问如何能够实现
1.跳过空行进行比较
2.在listview1和listview2中显示出不同行的行号和内容
希望的结果为
关于第1点,可以在比较前先把空行替换掉...但是这样就无法实现第2点要求了...
所以做到这里就卡着了.... |