Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732

Посчитать количество выражений в файле word

27.05.2014, 08:27. Показов 1127. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрям!

Помогите, пожалуйста, с концепцией и примерами кода.
1. Есть папка, в ней куча подпапок, в них есть файлы, в том числе нужные мне с названием "Проект***". Файлы в формате docx.
2. Структура файла стандартна: название, повестка, подробное описание вопросов.
3. Мне надо вытащить текст, который расположен между повесткой и подробным описанием, а из него взять названия объектов.
4. Посчитать сколько каких объектов перечислено всего в папке с кучей подпапок (пункт 1.).

Как вижу я:
1. указать путь к папке;
2. найти все файлы по маске (код?) и скопировать их во временную директорию.
3. преобразовать в txt для удобства обработки.
4. удалить все между повесткой дня и подробный описанием.
5. аналогично посту посчитать сколько названий объектов встречается в файлах.
6. результаты внести в новый txt файл.
7. удалить файлы из временной папки.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2014, 08:27
Ответы с готовыми решениями:

Посчитать количество предложений в файле
Считать текст с файла. Посчитать количество предложений. Изменить предложение N на строчную версию.

Посчитать количество слов в файле
Считываем из папки для каждого текстового файла общее количество слов(count). Как подсчитать общую сумму всех count'ов ? string files1 =...

Каким образом посчитать количество кадров в видео файле
Всем привет. У меня есть одна "глупая" затея. Собственно говоря вот ее проблемная часть. Существует определенный видеофайл формата avi. ...

8
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
27.05.2014, 08:57
Цитата Сообщение от Kir@ Посмотреть сообщение
найти все файлы по маске (код?)
C#
1
new DirectoryInfo("path").GetFiles("*.docx", SearchOption.AllDirectories);
Цитата Сообщение от Kir@ Посмотреть сообщение
преобразовать в txt для удобства обработки.
В какой-то степени легче будет именно с docx работать, как тут - https://www.cyberforum.ru/post6225931.html
Тогда ничего и копировать/конвертировать/удалять не надо будет.
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
27.05.2014, 09:24  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
C#
1
new DirectoryInfo("path").GetFiles("*.docx", SearchOption.AllDirectories);
Как их теперь скопировать в текущую папку программы? На это ругается, что в качестве цели указан каталог, а не файл:

C#
1
2
3
4
5
6
7
8
string fileName = "Проект*ля-ля*.docx";
            DirectoryInfo source = new DirectoryInfo(czkpatch.Text);
            string destin = Environment.CurrentDirectory;
 
            foreach (var item in source.GetFiles(fileName, SearchOption.AllDirectories))
            {
                item.CopyTo(destin, true);
            }
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
27.05.2014, 09:29
Kir@, Вы б хоть подсказку к методу прочитали...
CopyTo в качестве первого параметра просит путь к файлу, а не директории
C#
1
item.CopyTo(Path.Combine(destin, item.Name), true);
1
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
27.05.2014, 09:53  [ТС]
Все, отлично!
Теперь надо:
0. поочередно открыть все doc и docx файлы в текущем каталоге.
1. в doc и docx файлах найти выражение "первый вопрос" и удалить все начиная с него и до конца документа;
2. подсчитать сколько раз в остатке файлов встречается слово "slovo" и вывести в один сводный отчет, т.е.:
slovo1 - 10 раз
slovo2 - 8 раз
slovo2 - 0 раз

Добавлено через 6 минут
С пунктом 1 разобрался:

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
using System;
using Word = Microsoft.Office.Interop.Word;
 
class Program
{
    static void Main(string[] args)
    {
        Word.Application app = new Word.Application();
        Object fileName = @"D:\тест.docx";
        Object missing = Type.Missing;
        app.Documents.Open(ref fileName);
        Word.Find find = app.Selection.Find;
        find.Text = "slovo";
        
тут условие: если найдено "slovo", то в SlovoTextBox.Text = "+1";
иначе если найдено  "slovo1", то в Slovo1TextBox.Text = "+1";
и т.д.
 
        Object wrap = Word.WdFindWrap.wdFindContinue;
        Object replace = Word.WdReplace.wdReplaceAll;
        find.Execute(FindText: Type.Missing,
            MatchCase: false,
            MatchWholeWord: false,
            MatchWildcards: false,
            MatchSoundsLike: missing,
            MatchAllWordForms: false,
            Forward: true,
            Wrap: wrap,
            Format: false,
            ReplaceWith: missing, Replace: replace);
        app.ActiveDocument.Save();
        app.ActiveDocument.Close();
        app.Quit();       
    }
}
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
25.06.2014, 15:33  [ТС]
Вот такой код.
Он ищет слово "Южно" между двумя фразами.

Если в папке лежит один файл (в нем точно 3 раза встречается это слово), то выводит в отчет правильно - 3.
Если в папку добавить еще один файл, в котором слово встречается один раз, то выводит 2 и 1.
Соответственно, чем больше файлов, тем чаще происходит вычитание (???), в итоге у меня "0", при обработке 14 файлов.
Как быть?

Кликните здесь для просмотра всего текста
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
44
45
46
47
48
        {
 
            int Ug = 0; // счетчики
            string text = string.Empty;
            DirectoryInfo direct = null;
            FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog(); // путь
            folderBrowseDialog.SelectedPath = Environment.CurrentDirectory + @"\ЦЗК";
            if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
            {
                direct = new DirectoryInfo(folderBrowseDialog.SelectedPath); // путь к папке
                FileInfo[] fileArr = direct.GetFiles(); // массив имен файлов
                foreach (var fileName in fileArr) // цикл по файлам
                {
                    object path = Path.Combine(direct + "\\" + fileName.ToString()); // путь
                    for (int i = 0; i < fileArr.Length; i++) // цикл по файлу
                    {
                        text = null; // обнуляем текст файла
                        Word.Application app = new Word.Application();
                        Word.Document doc;
                        object missing = Type.Missing;
                        object readOnly = true;
                        doc = app.Documents.Open(ref path, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                        object start = 0; // начало файла
                        object stop = doc.Characters.Count; // конец файла
                        Word.Range Rng = doc.Range(ref start, ref stop); // считываем файл
                        text = Rng.Text; // пишем в переменную
                        for (int j = 0; j < text.Length; j++) // цикл по содержимому файла
                            if (text[j] == 'П' && text[j + 1] == 'о' && text[j + 2] == 'в' && text[j + 3] == 'е' && text[j + 4] == 'с' && text[j + 5] == 'т' && text[j + 6] == 'к' && text[j + 7] == 'а' && text[j + 8] == ' ' && text[j + 9] == 'д' && text[j + 10] == 'н' && text[j + 11] == 'я' && text[j + 12] == ':')
                            {
                                for (int k = j + 13; k < text.Length; k++) // цикл от 2 части документа
                                {
                                    if (text[k] == 'Ю' && text[k + 1] == 'ж' && text[k + 2] == 'н' && text[k + 3] == 'о' ) // Юг
                                        UETS++;
                                    else if (text[k] == 'П' && text[k + 1] == 'е' && text[k + 2] == 'р' && text[k + 3] == 'в' && text[k + 4] == 'ы' && text[k + 5] == 'й' && text[k + 6] == ' ' && text[k + 7] == 'в' && text[k + 8] == 'о' && text[k + 9] == 'п' && text[k + 10] == 'р' && text[k + 11] == 'о' && text[k + 12] == 'с') // если конец второй части файла выходим из цикла
                                                
                                
                                        break;
                                        
                                }
                                MessageBox.Show("Юг - " + Ug);        
                                break; // выходим из цикла
                              }
                        app.Quit(); // закрываем документ
                        
                    }
                    break; // выходим из цикла foreach
                    }
            }
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
26.06.2014, 00:49
Цитата Сообщение от Kir@ Посмотреть сообщение
Как быть?
Точно так же как ты разобрался с поиском выражения. Ищи слово и пока оно найдено, плюсуй счётчик:
C#
1
2
3
4
5
6
7
8
9
10
11
int counter=0;
while(find.Execute(FindText: Type.Missing,
            MatchCase: false,
            MatchWholeWord: false,
            MatchWildcards: false,
            MatchSoundsLike: missing,
            MatchAllWordForms: false,
            Forward: true,
            Wrap: wrap,
            Format: false){
    counter++;}
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
26.06.2014, 10:08  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Точно так же как ты разобрался с поиском выражения. Ищи слово и пока оно найдено, плюсуй счётчик:
Т.к. тему перенесли в раздел для начинающих, посмею спросить: куда прикрутить указанный счетчик?
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
26.06.2014, 11:47
Цитата Сообщение от Kir@ Посмотреть сообщение
куда прикрутить указанный счетчик?
Туда, где будешь использовать. Я привёл твой же код для первого пункта, только со счётчиком найденных фрагментов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2014, 11:47
Помогаю со студенческими работами здесь

Как посчитать количество одинаковых тегов в XML файле?
Добрый всем вечер. Помогите советом. Как посчитать количество тегов stop в теге times, при том, что тегов times будет сотня и тегов stop...

Как создать DataTable каждый раз когда меняется значение атрибута в xml файле или как мне посчитать количество
Вот пример для одного DataTable, а мне надо сделать List&lt;DataTable&gt; - ов, когда меняется значение атрибута path. А пока у меня все точки...

Как посчитать число различных символов в строке с помощью регулярных выражений?
Как посчитать число различных символов в строке с помощью регулярных выражений? Добавлено через 20 минут И почему программы с...

Посчитать количество символов в созданом файле, а также определить количество знаков препинания
Программа №1 Создать файл и записать в него 3 строки. Посчитать количество символов в созданом файле, а также определить количество...

Посчитать количество строк в файле
В файле input.txt записана информация из нескольких текстовых строк. Вывести содержимое этого файла на экран, посчитать количество строк в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru