C# 比较两个文档并更改文本颜色

C# 比较两个文档并更改文本颜色,c#,colors,richtextbox,match,C#,Colors,Richtextbox,Match,我正在寻找比较2个文件使用RichTextBox和上传到新的RichTextBox的某些文本,是相同的绿色和不同的文本在红色 我的意思是: 文件1 文件2 我想匹配第一个文件中的第一列和第二列,看看它们是否存在于第二个文件中的任何一行。如果匹配,则匹配的项目将使匹配的文本变为绿色,其他内容变为红色 有什么办法可以这样做吗 如何将第一列与其他文件中的列进行比较 是否可以更改RTB中文本的颜色而不是整行 编辑: 然而,这似乎无法正常工作 最左边的所有列都应该是完全的绿色,但由于某些原因,有些列

我正在寻找比较2个文件使用RichTextBox和上传到新的RichTextBox的某些文本,是相同的绿色和不同的文本在红色

我的意思是:

文件1 文件2
我想匹配第一个文件中的第一列和第二列,看看它们是否存在于第二个文件中的任何一行。如果匹配,则匹配的项目将使匹配的文本变为绿色,其他内容变为红色

  • 有什么办法可以这样做吗
  • 如何将第一列与其他文件中的列进行比较
  • 是否可以更改RTB中文本的颜色而不是整行
编辑: 然而,这似乎无法正常工作

最左边的所有列都应该是完全的绿色,但由于某些原因,有些列是黑色的,有些是黑色和绿色的。另外,下一列应该已找到所有内容,并将颜色更改为完全蓝色


您需要创建一个流程,逐行提取您想要的原始值。看起来您的文件不是平面格式,也不使用分隔符,因此提取这些值可能有点棘手。。。您在评论中提到,我们的数据是以空格分隔的。在这种情况下,可以对空格进行拆分,并使用数组的前两个元素创建搜索字符串

一旦找到了将这些列与文档其余部分分开的方法,请循环并调用如下内容:

if (richTextBox2.Find(mystring)>0)
{
    int my1stPosition=richTextBox1.Find(strSearch);
    richTextBox2.SelectionStart=my1stPosition;
    richTextBox2.SelectionLength=strSearch.Length;
    richTextBox2.SelectionFont=fnt;
    richTextBox2.SelectionColor=Color.Green;
} 
(代码主要取自)

“SelectionColor”基本上告诉RTB更改所选文本的颜色。您正在使用“SelectionStart”和“SelectionLength”使程序自动为您选择文本

显然,将字体参数更改为您想要的任何内容。如果您想突出显示文档RED的其余部分,您可能需要考虑默认情况下使新的RTB红色,因为它听起来好像只用于比较。

以上仅适用于第一次出现。如果希望它高亮显示所有引用,可能需要签出IndexOfAll。有关更多信息,请参阅本页:


IndexOfAll将返回一个数组,其中包含子字符串位于另一个字符串中的每个位置的列表。一旦找到这些,循环遍历数组,并使用上面列出的相同代码更改每组的颜色。

能否提供更多信息?你的文件是如何格式化的?它们是平的,每个新列之间有n个字符吗?制表符分隔?它们是空格分隔的,但我在上面用3格式化了它们,以使其更具可读性。列的宽度也不是固定的。假设前两列按您所说的空格分隔,您可以对空格进行拆分,并使用数组的前两个元素创建搜索字符串。如果你的数据不一致,事情很快就会变得一团糟。我正在努力使这项工作正常进行,这就是我迄今为止试图检查每一行的内容。。但是它不能正常工作。。(在我的帖子编辑中勾选上面的内容)试着看看这个:我再次编辑了上面的帖子。我们越来越接近找到答案了!!这是另一个我不确定的错误,所以使用你的代码,它似乎在很大程度上与一个值匹配正确…但是。。我遇到了一个错误。。假设值是C42,然后在文本中找到C4。即使匹配,它也不会将一个(C4)变为蓝色。然而,如果它在C42和/或C4之后找到C45,它将把那个(C45)变为蓝色…我将只放置一些断点来检查第一个元素的值。逐步执行并验证它是否正确拆分了这些值。虽然这个程序看起来确实越来越接近功能化了,但我可能会有点不同的结构。另外,如何为文本选择指定起点?
1   U13  IC-123456   SOMETEXT   1.00   EA P C n   Y
                     EC5547,3-UP                 50
1   U24  IC-123456   SOMETEXT   1.00   EA P C n   Y
                     EC5547,3-UP                 50
1   C1  147417   TEXT   2.00   EA P C n   Y
                 0603,EC0303             50
1   R123  138666   MORETEXT   2.00 EA P C n   Y
                                             50
......................more lines..........................
    private void checkMatchesInGCandBOM()
    {
        // Splits the text up to compare with the other text.
        var combinedSplit = combinedPlacementsRichTextBox.Text.Split('\n');

        string[] splitLines;

        foreach (var line in combinedSplit)
        {
            Match theMatch = Regex.Match(line, @"^.*");

            if (theMatch.Success)
            {
                // Stores the matched value in string output.
                string output = theMatch.Value;

                // Replaces the tabs with spaces.
                output = Regex.Replace(output, @"\s+", " ");
                splitLines = output.Split(' ');

                int pos = 0, pos2 = 0;
                pos = bomRichTextBox.Find(splitLines[0], pos, RichTextBoxFinds.MatchCase);
                pos2 = bomRichTextBox.Find(splitLines[1], pos2, RichTextBoxFinds.MatchCase);

                while (pos != -1)
                {
                    if (bomRichTextBox.SelectedText == splitLines[0] && bomRichTextBox.SelectedText != "")
                    {
                        int my1stPosition = bomRichTextBox.Find(splitLines[1]);
                        bomRichTextBox.SelectionStart = my1stPosition;
                        bomRichTextBox.SelectionLength = splitLines[0].Length;
                        bomRichTextBox.SelectionFont = new System.Drawing.Font("Arial", 8, FontStyle.Underline);
                        bomRichTextBox.SelectionColor = Color.Green;
                    }

                    pos = bomRichTextBox.Find(splitLines[0], pos + 1, RichTextBoxFinds.MatchCase);
                }

                while (pos2 != -1)
                {
                    if (bomRichTextBox.SelectedText == splitLines[1] && bomRichTextBox.SelectedText != "")
                    {
                        int my1stPosition = bomRichTextBox.Find(splitLines[0]);
                        bomRichTextBox.SelectionStart = my1stPosition;
                        bomRichTextBox.SelectionLength = splitLines[1].Length;
                        bomRichTextBox.SelectionFont = new System.Drawing.Font("Arial", 8, FontStyle.Underline);
                        bomRichTextBox.SelectionColor = Color.Blue;
                    }

                    pos2 = bomRichTextBox.Find(splitLines[1], pos2 + 1, RichTextBoxFinds.MatchCase);
                }
            }
        }
if (richTextBox2.Find(mystring)>0)
{
    int my1stPosition=richTextBox1.Find(strSearch);
    richTextBox2.SelectionStart=my1stPosition;
    richTextBox2.SelectionLength=strSearch.Length;
    richTextBox2.SelectionFont=fnt;
    richTextBox2.SelectionColor=Color.Green;
}