# ------------------------------------------------------------------------------# from PySide2.QtWidgets import QApplication,QMainWindow,QFileDialog; # ------------------------------------------------------------------------------# from pyfiles import ui_compareFiles as uicompF; from pyfiles import compare_files_by_content as compfiles; # ------------------------------------------------------------------------------# class MainWindow(QMainWindow): def __init__(self): super(MainWindow,self).__init__(); self.ui=uicompF.Ui_MainWindow(); self.ui.setupUi(self); # ----------------------------------------------------------------------# self.ui.openFileName1Button.clicked.connect(self.setOpenFile1Name) self.ui.openFileName2Button.clicked.connect(self.setOpenFile2Name) self.ui.compareFilesButton.clicked.connect(self.doCompare) self.ui.helpButton.clicked.connect(self.doHelp) # end def __init__: # --------------------------------------------------------------------------# # --------------------------------------------------------------------------# def setOpenFile1Name(self): (fileName,_)=QFileDialog.getOpenFileName(self, "Open File", self.ui.FileName1LineEdit.text(), "All Files (*);;Text Files (*.txt)"); if fileName: self.ui.FileName1LineEdit.setText(fileName); # end def setOpenFile1Name def setOpenFile2Name(self): (fileName,_)=QFileDialog.getOpenFileName(self, "Open File", self.ui.FileName2LineEdit.text(), "All Files (*);;Text Files (*.txt)"); if fileName: self.ui.FileName2LineEdit.setText(fileName); # end def setOpenFile1Name def doHelp(self): TB=self.ui.showResultTextBrowser; doOutput(TB,'\n# Purpose:'); doOutput(TB,'# The script compares 2 text files byte by byte ignoring'); doOutput(TB,'# differences in white space thefollowing way:'); doOutput(TB,'# For comparison sequences of white space characters are'); doOutput(TB,'# condensed to just one empty space character.'); doOutput(TB,"# If the option 'No White Space' is set, all white space"); doOutput(TB,"# will be eliminated."); doOutput(TB,'#'); doOutput(TB,'# Usage:'); doOutput(TB,'# Choose two text files'); doOutput(TB,'#'); doOutput(TB,'# Note:'); doOutput(TB,'# Names containing empty spaces must be enclosed by'); doOutput(TB,'# quotation marks.'); doOutput(TB,'#'); doOutput(TB,'# For different files:'); doOutput(TB,"# The first different non white character is marked with"); doOutput(TB,"# a '^'. Its position in the files is named 'At' in"); doOutput(TB,"# output."); doOutput(TB,"# 'L1-L2' is the difference of lengths of files."); doOutput(TB,'# Note! These numbers are numbers for internal files'); doOutput(TB,"# with all substrings '[ \\t\\n\\r\\f\\v]+' replaced"); doOutput(TB,'# by just one (or none) empty space character.\n'); # end doHelp() def doCompare(self): TB=self.ui.showResultTextBrowser; FileName1=self.ui.FileName1LineEdit.text(); FileName2=self.ui.FileName2LineEdit.text(); if (FileName1!="") and (FileName2!=""): if (FileName1!=FileName2): MatchCase=self.ui.matchCaseCheckBox.isChecked(); NoSpaceAtAll=self.ui.noSpaceRadioButton.isChecked(); try: Result=compfiles.compareFiles(FileName1,FileName2,MatchCase,NoSpaceAtAll); doOutput(TB,'\n# Comparing apart from white space ...'); doOutput(TB,'# Match case: '+str(MatchCase)); doOutput(TB,'\n> F1: '+FileName1); doOutput(TB,'> F2: '+FileName2); if (Result[0]): doOutput(TB,'\n+ The files are equal by content - apart from white space.'); doOutput(TB,''); else: # Different files doOutput(TB,'\n- The files are different by content - apart from white space:'); doOutput(TB,''); FirstDifferentCharNb=Result[2]; if FirstDifferentCharNb<10: Blanks=' '; for I in range(FirstDifferentCharNb): Blanks+=' '; else: Blanks=' '; # Max 26 blanks # end if doOutput(TB,' F1: "'+str(Result[3])); doOutput(TB,' F2: "'+Result[4]); doOutput(TB,Blanks+'^'); doOutput(TB,' At: '+str(Result[2])); doOutput(TB,' L1-L2: '+str(Result[1])); doOutput(TB,''); # end if doOutput(TB,'# Compared.'); except: doOutput(TB,'\n# Comparing apart from white space ...'); doOutput(TB,'> F1: '+FileName1); doOutput(TB,'> F2: '+FileName2); doOutput(TB,'\n! File ERROR - An exception occured when reading a file.'); doOutput(TB,' - The files must be text files.'); # end try else: doOutput(TB,'\n! Input ERROR - The names of the files are identical!'); # end if # end if # end def doCompare() # end class def doOutput(TextBrowser,Text): TextBrowser.append(Text); # end def doOutput # ------------------------------------------------------------------------------# # ------------------------------------------------------------------------------# def main(): import sys; app=QApplication(sys.argv); window=MainWindow(); window.show(); window.ui.FileName1LineEdit.setText("") window.ui.FileName2LineEdit.setText("") sys.exit(app.exec_()); # end def main # ------------------------------------------------------------------------------# # ------------------------------------------------------------------------------# if __name__=='__main__': print('\n# Beginning compareFiles.pyw ...\n'); # --------------------------------------------------------------------------# # --------------------------------------------------------------------------# main(); # --------------------------------------------------------------------------# # --------------------------------------------------------------------------# print('\n# Finished compareFiles.pyw.\n'); # end if main