查找 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++;
}

不确定这是否适用于所有情况,但对于给定的示例,它对我来说效果很好。