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());
 | 
						|
		}
 | 
						|
	}
 | 
						|
} |