Работа с большим объемом текста: какой тип данных выбрать - 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[]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д