查找2个文本框中的差异Interop C#

时间:2017-02-08 10:10:27

标签: c# interop indexof

我有两个PowerPoint演示文稿,一个原创,一个编辑,每个我有一个TextBox

这样做的想法是找到任何不匹配的文本。当我在2 TextBox es中找到不匹配的文字时,我会在编辑过的演示文稿中的TextBox中找到编辑过的字词的位置,并将该字词添加到原始演示文稿的文本框中

例如在我原来的演示文稿中有一个TextBox,其中包含“This is New”,在我编辑的演示文稿中,我有“Thisssss is Blaaa”。当我运行我的代码时,我得到以下“Thisssssss is New Blaaa”。这一切都很好,但是当我在我的原始PowerPoint中有TextBox字符串“This This”和编辑TextBox说“Thissss Blaa”时,我应该得到“This Thissss This Blaa”但是我得到了“这是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);
}

1 个答案:

答案 0 :(得分:1)

而不是获得当前的'通过firstStringListIndexOf内的索引,您可以在foreach循环之外声明indexOfWord并自行计数,以便变量保存当前索引。

否则firstStringList.IndexOf()将返回当前字符串的第一个出现。

此外,您可以将该索引作为第二个参数传递给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++;
}

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