2017-02-08 3 views
0

Ich habe 2 PowerPoint-Präsentationen ein Original und ein bearbeitet und in jedem von ihnen habe ich eine TextBox.Finden Sie die Unterschiede in 2 Textboxen Interop C#

Die Idee davon ist, jeden Text zu finden, der nicht übereinstimmt. Wenn ich Text finden, die nicht in der 2 TextBox sie paßt ich die Position des editierten Wortes in den TextBox in der bearbeiteten Präsentation finden und dieses Wort zu der ursprünglichen Präsentation der Textbox hinzufügen

zB in meiner ursprünglichen Präsentation hat ein TextBox das enthält "This is New" und in meiner bearbeiteten Präsentation habe ich "Thisssss is Blaaa". Wenn ich meinen Code starte, bekomme ich folgendes: "This Thesssss is New Blaaa". Das alles funktioniert gut, aber wenn ich eine TextBox in meinem ursprünglichen PowerPoint mit der Zeichenfolge "This This" und einem bearbeiteten TextBox sagen "Thisssss Blaa" habe, sollte ich "This Thesss This Blaa" bekommen, aber ich bekomme stattdessen "This Thesss Blaa". Es erhält nicht das zweite "This" von der ursprünglichen TextBox aus irgendeinem Grund. Irgendwelche Ideen, wie ich das beheben könnte?

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

Ich denke, wenn Sie 2 gleiche Wörter haben, wird das 'if (secondStringList.IndexOf (Wort) == -1) {...}' nicht ausgeführt. – Madenis

+0

@Madenis ja ich denke das ist der Fall. Irgendwelche Ideen, wie ich das lösen könnte? –

Antwort

1

Statt sich den ‚aktuellen‘ Index innerhalb firstStringList über IndexOf, können Sie indexOfWord außerhalb der foreach-Schleife erklären und sich selbst zählen, so dass die Variable, die den aktuellen Index hält.

Andernfalls firstStringList.IndexOf() wird das erste Auftreten der aktuellen Zeichenfolge zurückgegeben.

Außerdem können Sie diesen Index als zweiten Parameter an secondStringList.IndexOf() übergeben, um sicherzustellen, dass Sie den Index einer bereits eingefügten Zeichenfolge nicht erhalten.

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

Nicht sicher, ob das in allen Fällen funktioniert, aber mit dem gegebenen Beispiel funktionierte es gut für mich.

+0

Das gab 'This This's Blaa' statt 'This This Blaa' zurück. Ist dir das passiert? –

+0

Ok, egal, es hat funktioniert: P –

+0

Vielen Dank :) –

Verwandte Themen