Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 2
Регистрация: 23.12.2014
Сообщений: 25
1

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

18.05.2015, 07:58. Показов 2533. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть метод замены текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
        }
        // поиск строки и ее замена на заданную строку
в нем strToFind строка которая ищется в документе, а replaceStr строка, которая записывается на место strToFind.
Мне требуется реализовать функцию для работы с большим объемом текста, который не умещается в тип string, я решил использовать вместо string SringBuilder, изменил в методе тип входного аргумента replaceStr:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 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
        }
однако во втором случае вылетает исключение
Exception:Thrown: "Отсутствующий параметр не имеет значения по умолчанию." (System.ArgumentException)
Исключение появляется в строке
C#
1
object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
Как переделать 2-й метод?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2015, 07:58
Ответы с готовыми решениями:

Работа с большим объемом данных
Всем привет! Всегда создавал коллекцию List&lt;List&lt;xxx&gt;&gt;, заносил в нее данные из txt файла, а потом...

Работа с большим объемом данных в реальном времени
Добрый день! Недавно решил перевести один проект с Delphi на C#. Проект связан с получением и...

Работа с большим объемом данных
Имеется загруженное изоображение с помощью opencv. Задача: вывести цвета изображения с из...

Работа с большим объемом данных
Всем привет! Работа с большим объемом данных заставляет задуматься над всевозможными способами...

3
Администратор
Эксперт .NET
17552 / 13775 / 5298
Регистрация: 17.03.2014
Сообщений: 28,253
Записей в блоге: 1
19.05.2015, 09:30 2
Цитата Сообщение от smilemanrus Посмотреть сообщение
Мне требуется реализовать функцию для работы с большим объемом текста, который не умещается в тип string
Тип string умеет работать со строками длиной до 2 Гб. В реальности ограничение ниже, но тем не менее объемы текста можно хранить довольно большие. Со строками какой именно длины ты имеешь дело?

Цитата Сообщение от smilemanrus Посмотреть сообщение
я решил использовать вместо string SringBuilder, изменил в методе тип входного аргумента replaceStr:
На StringBuilder действуют теже ограничения что и на string. Более того в среднем StringBuilder будет больше памяти занимать. Так что это бессмысленная замена.

Цитата Сообщение от smilemanrus Посмотреть сообщение
однако во втором случае вылетает исключение
Очевидно Word понятия не имеет как работать со StringBuilder.
0
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
19.05.2015, 10:48 3
Лучший ответ Сообщение было отмечено smilemanrus как решение

Решение

smilemanrus, а пробовали?
C#
1
string[]
1
0 / 0 / 2
Регистрация: 23.12.2014
Сообщений: 25
23.05.2015, 16:27  [ТС] 4
да, с его помощью получилось, спасибо
0
23.05.2015, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2015, 16:27
Помогаю со студенческими работами здесь

работа с большим объемом данных
большим я называю от 300000Rx50C судя по информации из диспетчера задач происходит накопление...

Работа с большим объемом данных
Коллеги, подскажите по такому вопросу. Есть выборка, несколько миллионов записей. Каким образом...

QtSerialPort Работа с большим объемом данных
Добрый день. Я пишу приложение, которое работает с последовательным портом при помощи...

Cron задание, работа с большим объемом данных
К примеру есть скрипт, который должен делать коррекцию данных на сайте. Данных много и к примеру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru