我希望使用RichTextBoxes比较2个文件,并将它们上传到新的RichTextBox中,其中某些文本的绿色相同,不同的文本为红色。
我的意思是:
C1 147417 111.111 222.222 0 TEXT
U13 IC-123456 1234 9876 360 TEXT
R123 13866 -99.9 123.456 100 TEXT
U24 IC-123456 -14 -50 90 TEXT
............more lines............
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..........................
我想在第一个文件中匹配 第1列和第2列 ,看看它们是否存在于第二个文件的任何行中。如果匹配,匹配的项目会将匹配的文本变为绿色,其他所有内容都会变为红色。
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);
}
}
}
但是,这似乎没有正常工作....!
最左边的所有列都应该是 完全 绿色,但由于某种原因,有些是黑色的,有些是黑色和绿色。此外,下一列应该已找到所有内容,并将颜色更改为完成蓝色.. This is what it turned out to look like using the code above.
答案 0 :(得分:1)
您需要创建一个能够逐行提取所需原始值的流程。它看起来不像你的文件是扁平格式而且不使用分隔符,所以提取这些值可能有点棘手......你在评论中提到我们的数据是空格分隔的。在这种情况下,您可以对空格进行拆分,并使用数组的前两个元素创建搜索字符串。
一旦您有办法将这些列与文档的其余部分分开,请循环并调用类似这样的内容:
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”自动为您选择文本。
显然将字体参数更改为您想要的任何内容。如果要将文档的其余部分突出显示为红色,则可能需要考虑默认情况下将新RTB设置为红色,因为它听起来好像只用于比较。
以上内容仅适用于第一次出现。如果您希望它突出显示所有出现,您可能想要查看IndexOfAll。有关详情,请参阅此页:http://www.dijksterhuis.org/manipulating-strings-in-csharp-finding-all-occurrences-of-a-string-within-another-string/
IndexOfAll将返回一个数组,其中包含子字符串位于另一个字符串中的每个位置的列表。一旦找到这些,循环遍历数组并使用上面列出的相同代码来更改每个集的颜色。