259 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Data;
 | |
| using System.Drawing;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using System.IO;
 | |
| using System.Text.RegularExpressions;
 | |
| 
 | |
| namespace FindDifferences
 | |
| {
 | |
| 	public partial class frmFindDifferences : Form
 | |
| 	{
 | |
| 		public frmFindDifferences()
 | |
| 		{
 | |
| 			InitializeComponent();
 | |
| 		}
 | |
| 		private void frmFindDifferences_Load(object sender, EventArgs e)
 | |
| 		{
 | |
| 			LoadSettings();
 | |
| 			SetupComboBoxes();
 | |
| 		}
 | |
| 		private void LoadSettings()
 | |
| 		{
 | |
| 			Size = Properties.Settings.Default.Size;
 | |
| 			Resize += new EventHandler(frmFindDifferences_Resize);
 | |
| 			Location = Properties.Settings.Default.Location;
 | |
| 			Move += new EventHandler(frmFindDifferences_Move);
 | |
| 			tbCompare.Text = Properties.Settings.Default.CompareFolder;
 | |
| 			tbCompare.TextChanged += new EventHandler(tbCompare_TextChanged);
 | |
| 			tbPdf.Text = Properties.Settings.Default.PdfFolder;
 | |
| 			tbPdf.TextChanged += new EventHandler(tbPdf_TextChanged);
 | |
| 			splitContainer1.SplitterDistance = Properties.Settings.Default.SplitterDistance;
 | |
| 			splitContainer1.SplitterMoved +=new SplitterEventHandler(splitContainer1_SplitterMoved);
 | |
| 			WindowState = Properties.Settings.Default.WindowState;
 | |
| 			cbShowFirst.Checked = Properties.Settings.Default.ShowFirst;
 | |
| 			cbShowFirst.CheckedChanged += new EventHandler(cbShowFirst_CheckedChanged);
 | |
| 		}
 | |
| 		void cbShowFirst_CheckedChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.ShowFirst = cbShowFirst.Checked;
 | |
| 			SetupDifferences();
 | |
| 		}
 | |
| 		void tbPdf_TextChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.PdfFolder = tbPdf.Text;
 | |
| 		}
 | |
| 		void tbCompare_TextChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.CompareFolder = tbCompare.Text;
 | |
| 			SetupComboBoxes();
 | |
| 		}
 | |
| 		void frmFindDifferences_Move(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.WindowState = WindowState;
 | |
| 			if (WindowState == FormWindowState.Normal)
 | |
| 				Properties.Settings.Default.Location = Location;
 | |
| 		}
 | |
| 		void frmFindDifferences_Resize(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.WindowState = WindowState;
 | |
| 			if (WindowState == FormWindowState.Normal)
 | |
| 				Properties.Settings.Default.Size = Size;
 | |
| 		}
 | |
| 		private void SetupComboBoxes()
 | |
| 		{
 | |
| 			if (tbCompare.Text != string.Empty)
 | |
| 				LoadComboBoxes();
 | |
| 			else
 | |
| 				DisableComboBoxes();
 | |
| 		}
 | |
| 		private void LoadComboBoxes()
 | |
| 		{
 | |
| 			DirectoryInfo di = new DirectoryInfo(tbCompare.Text);
 | |
| 			if (di.Exists)
 | |
| 			{
 | |
| 				List<string> myFiles1 = new List<string>();
 | |
| 				List<string> myFiles2 = new List<string>();
 | |
| 				foreach (FileInfo myFile in di.GetFiles("*.txt"))
 | |
| 				{
 | |
| 					myFiles1.Add(myFile.Name);
 | |
| 					myFiles2.Add(myFile.Name);
 | |
| 				}
 | |
| 				cmbCompare.SelectedIndexChanged -= new EventHandler(cmbCompare_SelectedIndexChanged);
 | |
| 				cmbWith.SelectedIndexChanged -= new EventHandler(cmbCompare_SelectedIndexChanged);
 | |
| 				cmbCompare.DataSource = myFiles1;
 | |
| 				cmbWith.DataSource = myFiles2;
 | |
| 				cmbCompare.Enabled = true;
 | |
| 				cmbWith.Enabled = true;
 | |
| 				cmbCompare.SelectedIndex = -1;
 | |
| 				cmbWith.SelectedIndex = -1;
 | |
| 				cmbCompare.SelectedIndexChanged += new EventHandler(cmbCompare_SelectedIndexChanged);
 | |
| 				cmbWith.SelectedIndexChanged += new EventHandler(cmbCompare_SelectedIndexChanged);
 | |
| 			}
 | |
| 			else
 | |
| 				DisableComboBoxes();
 | |
| 		}
 | |
| 		void cmbCompare_SelectedIndexChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			SetupDifferences();
 | |
| 		}
 | |
| 		private void DisableComboBoxes()
 | |
| 		{
 | |
| 			lbDifferences.Enabled = false;
 | |
| 			cmbCompare.Enabled = false;
 | |
| 			cmbWith.Enabled = false;
 | |
| 		}
 | |
| 		private void SetupDifferences()
 | |
| 		{
 | |
| 			if (cmbCompare.Text != string.Empty && cmbWith.Text != string.Empty)
 | |
| 			{
 | |
| 				List<string> compareList = BuildList(cmbCompare.Text);
 | |
| 				List<string> withList = BuildList(cmbWith.Text);
 | |
| 				RemoveMatches(withList, compareList);
 | |
| 				if (cbShowFirst.Checked) RemoveMultiples(withList);
 | |
| 				lbDifferences.Click -= new EventHandler(lbDifferences_Click);
 | |
| 				//lbDifferences.SelectedIndexChanged -= new EventHandler(lbDifferences_SelectedIndexChanged);
 | |
| 				lblDifferences.Text = withList.Count.ToString() + " Differences";
 | |
| 				lbDifferences.DataSource = withList;
 | |
| 				lbDifferences.Enabled = true;
 | |
| 				//lbDifferences.SelectedIndexChanged += new EventHandler(lbDifferences_SelectedIndexChanged);
 | |
| 				lbDifferences.Click += new EventHandler(lbDifferences_Click);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				lbDifferences.DataSource = null;
 | |
| 				lbDifferences.Enabled = false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		void lbDifferences_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			wb.Navigate("about:blank");
 | |
| 			Clipboard.Clear();
 | |
| 			if (lbDifferences.SelectedValue != null)
 | |
| 			{
 | |
| 				Clipboard.SetText(lbDifferences.SelectedValue.ToString());
 | |
| 				tmr.Enabled = true;
 | |
| 			}
 | |
| 		}
 | |
| 		Regex myRegExpMult = new Regex("'([^']*?)','([^']*)?',([0-9]*,'[^']*?)'");
 | |
| 		private void RemoveMultiples(List<string> withList)
 | |
| 		{
 | |
| 			List<string> multList = new List<string>();
 | |
| 			string last = string.Empty;
 | |
| 			foreach (string str in withList)
 | |
| 			{
 | |
| 				string found = myRegExpMult.Replace(str, "$1.$2");
 | |
| 				if (found == last) multList.Add(str);
 | |
| 				last = found;
 | |
| 			}
 | |
| 			foreach (string str in multList)
 | |
| 				withList.Remove(str);
 | |
| 		}
 | |
| 		void lbDifferences_SelectedIndexChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			wb.Navigate("about:blank");
 | |
| 			Clipboard.Clear();
 | |
| 			if (lbDifferences.SelectedValue != null)
 | |
| 			{
 | |
| 				Clipboard.SetText(lbDifferences.SelectedValue.ToString());
 | |
| 				tmr.Enabled = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private void RemoveMatches(List<string> withList, List<string> compareList)
 | |
| 		{
 | |
| 			foreach (string str in compareList)
 | |
| 				if (withList.Contains(str))
 | |
| 					withList.Remove(str);
 | |
| 		}
 | |
| 
 | |
| 		private List<string> BuildList(string fileName)
 | |
| 		{
 | |
| 			List<string> myList = new List<string>();
 | |
| 			FileInfo myFile = new FileInfo(tbCompare.Text + "\\" + fileName);
 | |
| 			using (StreamReader sr = myFile.OpenText())
 | |
| 			{
 | |
| 				while (!sr.EndOfStream)
 | |
| 				{
 | |
| 					string str = sr.ReadLine();
 | |
| 					if(str != string.Empty)
 | |
| 						myList.Add(str);
 | |
| 				}
 | |
| 				sr.Close();
 | |
| 			}
 | |
| 			return myList;
 | |
| 		}
 | |
| 		private string CompareFolder
 | |
| 		{
 | |
| 			get 
 | |
| 			{
 | |
| 				if (tbCompare.Text == string.Empty)
 | |
| 					return Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
 | |
| 				return tbCompare.Text; 
 | |
| 			}
 | |
| 		}
 | |
| 		private string PdfFolder
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if (tbPdf.Text == string.Empty)
 | |
| 					return Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
 | |
| 				return tbPdf.Text;
 | |
| 			}
 | |
| 		}
 | |
| 		private void btnCompare_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			fbd.SelectedPath = CompareFolder;
 | |
| 			if (fbd.ShowDialog() == DialogResult.OK)
 | |
| 				tbCompare.Text = fbd.SelectedPath;
 | |
| 		}
 | |
| 		private void btnPdf_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			fbd.SelectedPath = PdfFolder;
 | |
| 			if (fbd.ShowDialog() == DialogResult.OK)
 | |
| 				tbPdf.Text = fbd.SelectedPath;
 | |
| 		}
 | |
| 		private void frmFindDifferences_FormClosing(object sender, FormClosingEventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.Save();
 | |
| 		}
 | |
| 		Regex myRegExp = new Regex("'([^']*?)','[^']*?',([0-9]*,'[^']*?)'");
 | |
| 		private void tmr_Tick(object sender, EventArgs e)
 | |
| 		{
 | |
| 			tmr.Enabled = false;
 | |
| 			string url = myRegExp.Replace(lbDifferences.SelectedValue.ToString(), tbPdf.Text + @"\$1.pdf#search=""$2""");
 | |
| 			wb.Navigate(url);
 | |
| 		}
 | |
| 		private void btnClosePdf_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			wb.Navigate("about:blank");
 | |
| 		}
 | |
| 		private void btnRefresh_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			int indCompare = cmbCompare.SelectedIndex;
 | |
| 			int indWith = cmbWith.SelectedIndex;
 | |
| 			LoadComboBoxes();
 | |
| 			cmbCompare.SelectedIndex = indCompare;
 | |
| 			cmbWith.SelectedIndex = indWith;
 | |
| 		}
 | |
| 		private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
 | |
| 		{
 | |
| 			Properties.Settings.Default.SplitterDistance = splitContainer1.SplitterDistance;
 | |
| 		}
 | |
| 
 | |
| 		private void btnCopy_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Clipboard.Clear();
 | |
| 			StringBuilder sb = new StringBuilder();
 | |
| 			foreach(string str in lbDifferences.DataSource as List<string>)
 | |
| 			{
 | |
| 				sb.Append(str + "\r\n");
 | |
| 			}
 | |
| 			Clipboard.SetText(sb.ToString());
 | |
| 		}
 | |
| 	}
 | |
| } |