Работа с большим объемом текста: какой тип данных выбрать - C#
Формулировка задачи:
У меня есть метод замены текста
в нем strToFind строка которая ищется в документе, а replaceStr строка, которая записывается на место strToFind.
Мне требуется реализовать функцию для работы с большим объемом текста, который не умещается в тип string, я решил использовать вместо string SringBuilder, изменил в методе тип входного аргумента replaceStr:
однако во втором случае вылетает исключение
Exception:Thrown: "Отсутствующий параметр не имеет значения по умолчанию." (System.ArgumentException)
Исключение появляется в строке
Как переделать 2-й метод?
Листинг программы
- public void ReplaceAllStrings(string strToFind, string replaceStr)
- {
- if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); }
- // обьектные строки для Word
- object strToFindObj = strToFind;
- object replaceStrObj = replaceStr;
- // диапазон документа Word
- Word.Range wordRange;
- //тип поиска и замены
- object replaceTypeObj;
- replaceTypeObj = Word.WdReplace.wdReplaceAll;
- try
- {
- // обходим все разделы документа
- for (int i = 1; i <= _document.Sections.Count; i++)
- {
- // берем всю секцию диапазоном
- wordRange = _document.Sections[i].Range;
- /*
- Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: [url]http://support.microsoft.com/default.aspx?scid=kb;en-us;313104[/url]
- // выполняем метод поиска и замены обьекта диапазона ворд
- 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);
- */
- Word.Find wordFindObj = wordRange.Find;
- object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
- wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters);
- }
- }
- catch (Exception error)
- {
- throw new Exception("Ошибка при выполнении замене всех строк в документе Word. " + error.Message + " (ReplaceAllStrings)");
- }
- // завершение функции поиска и замены SearchAndReplace
- }
- // поиск строки и ее замена на заданную строку
Листинг программы
- public void ReplaceAllLongStrings(string strToFind, StringBuilder replaceStr)
- {
- if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); }
- // обьектные строки для Word
- object strToFindObj = strToFind;
- object replaceStrObj = replaceStr;
- // диапазон документа Word
- Word.Range wordRange;
- //тип поиска и замены
- object replaceTypeObj;
- replaceTypeObj = Word.WdReplace.wdReplaceAll;
- try
- {
- // обходим все разделы документа
- for (int i = 1; i <= _document.Sections.Count; i++)
- {
- // берем всю секцию диапазоном
- wordRange = _document.Sections[i].Range;
- /*
- Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: [url]http://support.microsoft.com/default.aspx?scid=kb;en-us;313104[/url]
- // выполняем метод поиска и замены обьекта диапазона ворд
- 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);
- */
- Word.Find wordFindObj = wordRange.Find;
- object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
- wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters);
- }
- }
- catch (Exception error)
- {
- throw new Exception("Ошибка при выполнении замене всех строк в документе Word. " + error.Message + " (ReplaceAllLongStrings)");
- }
- // завершение функции поиска и замены SearchAndReplace
- }
Листинг программы
- object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
Решение задачи: «Работа с большим объемом текста: какой тип данных выбрать»
textual
Листинг программы
- string[]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д