Работа с большим объемом текста: какой тип данных выбрать - C#

Узнай цену своей работы

Формулировка задачи:

У меня есть метод замены текста
Листинг программы
  1. public void ReplaceAllStrings(string strToFind, string replaceStr)
  2. {
  3. if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); }
  4. // обьектные строки для Word
  5. object strToFindObj = strToFind;
  6. object replaceStrObj = replaceStr;
  7. // диапазон документа Word
  8. Word.Range wordRange;
  9. //тип поиска и замены
  10. object replaceTypeObj;
  11. replaceTypeObj = Word.WdReplace.wdReplaceAll;
  12. try
  13. {
  14. // обходим все разделы документа
  15. for (int i = 1; i <= _document.Sections.Count; i++)
  16. {
  17. // берем всю секцию диапазоном
  18. wordRange = _document.Sections[i].Range;
  19. /*
  20. Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: [url]http://support.microsoft.com/default.aspx?scid=kb;en-us;313104[/url]
  21. // выполняем метод поиска и замены обьекта диапазона ворд
  22. wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing);
  23. */
  24. Word.Find wordFindObj = wordRange.Find;
  25.  
  26. object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
  27. wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters);
  28. }
  29. }
  30. catch (Exception error)
  31. {
  32. throw new Exception("Ошибка при выполнении замене всех строк в документе Word. " + error.Message + " (ReplaceAllStrings)");
  33. }
  34. // завершение функции поиска и замены SearchAndReplace
  35. }
  36. // поиск строки и ее замена на заданную строку
в нем strToFind строка которая ищется в документе, а replaceStr строка, которая записывается на место strToFind. Мне требуется реализовать функцию для работы с большим объемом текста, который не умещается в тип string, я решил использовать вместо string SringBuilder, изменил в методе тип входного аргумента replaceStr:
Листинг программы
  1. public void ReplaceAllLongStrings(string strToFind, StringBuilder replaceStr)
  2. {
  3. if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); }
  4. // обьектные строки для Word
  5. object strToFindObj = strToFind;
  6. object replaceStrObj = replaceStr;
  7. // диапазон документа Word
  8. Word.Range wordRange;
  9. //тип поиска и замены
  10. object replaceTypeObj;
  11. replaceTypeObj = Word.WdReplace.wdReplaceAll;
  12. try
  13. {
  14. // обходим все разделы документа
  15. for (int i = 1; i <= _document.Sections.Count; i++)
  16. {
  17. // берем всю секцию диапазоном
  18. wordRange = _document.Sections[i].Range;
  19. /*
  20. Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: [url]http://support.microsoft.com/default.aspx?scid=kb;en-us;313104[/url]
  21. // выполняем метод поиска и замены обьекта диапазона ворд
  22. wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing);
  23. */
  24. Word.Find wordFindObj = wordRange.Find;
  25.  
  26. object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
  27. wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters);
  28. }
  29. }
  30. catch (Exception error)
  31. {
  32. throw new Exception("Ошибка при выполнении замене всех строк в документе Word. " + error.Message + " (ReplaceAllLongStrings)");
  33. }
  34. // завершение функции поиска и замены SearchAndReplace
  35. }
однако во втором случае вылетает исключение Exception:Thrown: "Отсутствующий параметр не имеет значения по умолчанию." (System.ArgumentException) Исключение появляется в строке
Листинг программы
  1. object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
Как переделать 2-й метод?

Решение задачи: «Работа с большим объемом текста: какой тип данных выбрать»

textual
Листинг программы
  1. string[]

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы