예제 #1
0
 private void timer1_Tick(object sender, EventArgs e)
 {
     lock (timer1)
     {
         if (resultQueue != null)
         {
             foreach (ResultItem item in resultQueue)
             {
                 ListViewItem listItem = new ListViewItem();
                 listItem.Text = item.filename;
                 occurrences  += item.hits;
                 DeltaInfo deltaInfo = DeltaInfo.Construct(item.before, item.after);
                 if (deltaInfo != null)
                 {
                     if (deltaInfo.EndPosBefore - deltaInfo.StartPos > 0 &&
                         deltaInfo.EndPosAfter - deltaInfo.StartPos > 0)
                     {
                         listItem.SubItems.Add(item.before.Substring(deltaInfo.StartPos, deltaInfo.EndPosBefore - deltaInfo.StartPos).Trim());
                         listItem.SubItems.Add(item.after.Substring(deltaInfo.StartPos, deltaInfo.EndPosAfter - deltaInfo.StartPos).Trim());
                     }
                     else
                     {
                         listItem.Text = "ERROR" + listItem.Text;
                     }
                     Result.Items.Add(listItem);
                 }
             }
         }
         resultQueue = null;
     }
     if (endSignalReceived)
     {
         StatusText.Text = "Done";
         Go.Text         = "Go";
         timer1.Stop();
     }
     else
     {
         if (currentlyScanning != "")
         {
             StatusText.Text = currentlyScanning.Substring(Path.Text.Length);
         }
         else
         {
             StatusText.Text = "Preparing...";
         }
     }
     ProgressText.Text = String.Format("{0} scanned; {1} found in {2} files. ", scanned, occurrences, Result.Items.Count);
 }
예제 #2
0
        public static DeltaInfo Construct(string before, string after)
        {
            if (before == after)
            {
                return(null);
            }

            char[] beforeArray = before.ToCharArray();
            char[] afterArray  = after.ToCharArray();


            int startPos     = beforeArray.TakeWhile((x, i) => x == afterArray[i]).Count();
            int endPosBefore = beforeArray.TakeWhile((x, i) => i <= startPos || x != '\n').Count();
            int endPosAfter  = afterArray.TakeWhile((x, i) => i <= startPos || x != '\n').Count();

            DeltaInfo deltaInfo = new DeltaInfo();

            deltaInfo.StartPos     = startPos;
            deltaInfo.EndPosAfter  = endPosAfter;
            deltaInfo.EndPosBefore = endPosBefore;

            return(deltaInfo);
        }