查找 2 个文本框互操作 C# 中的差异
Finding the differences in 2 Textboxes Interop C#
我有 2 个 PowerPoint 演示文稿,一个是原创的,一个是编辑过的,每个都有一个 TextBox
。
这样做的目的是找到任何不匹配的文本。当我在 2 TextBox
中找到不匹配的文本时,我在编辑的演示文稿中的 TextBox
中找到了编辑后的单词的位置,并将该单词添加到原始演示文稿的文本框
例如,在我的原始演示文稿中有一个 TextBox
,其中包含 "This is New",而在我编辑的演示文稿中,我有 "Thisssss is Blaaa"。当我 运行 我的代码时,我得到以下 "This Thisssss is New Blaaa"。这一切都很好,但是当我在我的原始 PowerPoint 中有一个 TextBox
字符串 "This This" 和一个编辑过的 TextBox
说 "Thissss Blaa" 我应该得到 "This Thissss This Blaa" 但是我取而代之的是 "This Thissss Blaa"。由于某种原因,它没有从原始 TextBox
中获取第二个 "This"。有什么办法可以解决这个问题吗?
var q = from original in originalList
join editedTmp in editList on original.Id equals editedTmp.Id into g
from edited in g.DefaultIfEmpty()
select new
{
original,
edited
};
foreach (var item in q)
{
var originalString = item.original.TextFrame.TextRange.Text;
var editString = item.edited.TextFrame.TextRange.Text;
var firstStringList = originalString.Split(delimiter).ToList();
var secondStringList = editString.Split(delimiter).ToList();
foreach (var word in firstStringList)
{
if (secondStringList.IndexOf(word) == -1)
{
var indexOfWord = firstStringList.IndexOf(word); //gets the position of the edited word eg. 3.
// using indexOfWord+indexOfWord as I need do this if more than one word is added.
secondStringList.Insert(indexOfWord + indexOfWord, word);
// Insert the word that was not found at position 3 inside secondStringList
one.Add(word);
}
}
// Join the secondStringList to make 1 string separated by the space character
item.edited.TextFrame.TextRange.Text = string.Join(" ", secondStringList);
}
不是通过 IndexOf
获取 firstStringList
内的 'current' 索引,而是可以在 foreach 循环外声明 indexOfWord
并自己计算,这样变量保存当前索引。
否则firstStringList.IndexOf()
将return第次出现当前字符串。
此外,您可以将该索引作为第二个参数传递给 secondStringList.IndexOf()
,以确保您不会获得已插入字符串的索引。
int indexOfWord=0;
foreach (var word in firstStringList)
{
if (secondStringList.IndexOf(word,indexOfWord) == -1)
{
// using indexOfWord+indexOfWord as I need do this if more than one word is added.
secondStringList.Insert(indexOfWord + indexOfWord, word);
// Insert the word that was not found at position 3 inside secondStringList
one.Add(word);
}
indexOfWord++;
}
不确定这是否适用于所有情况,但对于给定的示例,它对我来说效果很好。
我有 2 个 PowerPoint 演示文稿,一个是原创的,一个是编辑过的,每个都有一个 TextBox
。
这样做的目的是找到任何不匹配的文本。当我在 2 TextBox
中找到不匹配的文本时,我在编辑的演示文稿中的 TextBox
中找到了编辑后的单词的位置,并将该单词添加到原始演示文稿的文本框
例如,在我的原始演示文稿中有一个 TextBox
,其中包含 "This is New",而在我编辑的演示文稿中,我有 "Thisssss is Blaaa"。当我 运行 我的代码时,我得到以下 "This Thisssss is New Blaaa"。这一切都很好,但是当我在我的原始 PowerPoint 中有一个 TextBox
字符串 "This This" 和一个编辑过的 TextBox
说 "Thissss Blaa" 我应该得到 "This Thissss This Blaa" 但是我取而代之的是 "This Thissss Blaa"。由于某种原因,它没有从原始 TextBox
中获取第二个 "This"。有什么办法可以解决这个问题吗?
var q = from original in originalList
join editedTmp in editList on original.Id equals editedTmp.Id into g
from edited in g.DefaultIfEmpty()
select new
{
original,
edited
};
foreach (var item in q)
{
var originalString = item.original.TextFrame.TextRange.Text;
var editString = item.edited.TextFrame.TextRange.Text;
var firstStringList = originalString.Split(delimiter).ToList();
var secondStringList = editString.Split(delimiter).ToList();
foreach (var word in firstStringList)
{
if (secondStringList.IndexOf(word) == -1)
{
var indexOfWord = firstStringList.IndexOf(word); //gets the position of the edited word eg. 3.
// using indexOfWord+indexOfWord as I need do this if more than one word is added.
secondStringList.Insert(indexOfWord + indexOfWord, word);
// Insert the word that was not found at position 3 inside secondStringList
one.Add(word);
}
}
// Join the secondStringList to make 1 string separated by the space character
item.edited.TextFrame.TextRange.Text = string.Join(" ", secondStringList);
}
不是通过 IndexOf
获取 firstStringList
内的 'current' 索引,而是可以在 foreach 循环外声明 indexOfWord
并自己计算,这样变量保存当前索引。
否则firstStringList.IndexOf()
将return第次出现当前字符串。
此外,您可以将该索引作为第二个参数传递给 secondStringList.IndexOf()
,以确保您不会获得已插入字符串的索引。
int indexOfWord=0;
foreach (var word in firstStringList)
{
if (secondStringList.IndexOf(word,indexOfWord) == -1)
{
// using indexOfWord+indexOfWord as I need do this if more than one word is added.
secondStringList.Insert(indexOfWord + indexOfWord, word);
// Insert the word that was not found at position 3 inside secondStringList
one.Add(word);
}
indexOfWord++;
}
不确定这是否适用于所有情况,但对于给定的示例,它对我来说效果很好。