2017-02-08 1 views
0

두 개의 PowerPoint 프레젠테이션 중 하나는 원본과 하나는 편집되었고 각각은 TextBox입니다.두 텍스트 상자의 차이점 찾기 Interop C#

이 아이디어는 일치하지 않는 텍스트를 찾는 것입니다. 내가 편집 된 프레젠테이션의 TextBox에서 편집 된 단어의 위치를 ​​찾을 수 2 개 TextBox ES에 일치 원래의 프리젠 테이션의 텍스트 상자에 해당 단어를 추가하지 않는 텍스트를 찾을 때

내 원래 프레 젠 테이션에서

예는 TextBox있다 여기에는 "This is New"가 포함되어 있으며 편집 된 프레젠테이션에는 "Thisssss is Blaaa"가 있습니다. 코드를 실행하면 다음과 같은 "This Thisssss is New Blaaa"가 표시됩니다. 그러나이 모든 문자열은 "This This This Blaa"라는 문자열을 사용하여 원래의 PowerPoint에 TextBox 문자열을 가지고 있고 "Thissss Blaa"라고 편집 된 TextBox이 있지만 "This Thiss Bla"를 얻지 만 대신이 "Thissss Blaa"를 얻습니다. 어떤 이유로 든 원래의 TextBox에서 두 번째 "This"를 얻지 못합니다. 이 문제를 해결할 수있는 아이디어가 있습니까? 대신 IndexOf를 통해 firstStringList 내부의 '현재'인덱스를 얻기의

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); 
} 
+0

두 단어가 같은 경우'if (secondStringList.IndexOf (word) == -1) {...}'이 실행되지 않습니다. – Madenis

+0

@Madenis 예 그렇습니다. 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까? –

답변

1

, 당신은 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++; 
} 

모든 경우에 사용할 수 있지만 주어진 예에서는 제대로 작동하는지 확실하지 않습니다.

+0

'This Thiss This Blaa'대신 'This This Thiss This Blaa'가 반환되었습니다. 이 일이 당신에게 일어 났습니까? –

+0

괜찮습니다. P –

+0

대단히 감사합니다. –

관련 문제