Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925

Поиск по тексту подобие таблицы

06.07.2022, 13:04. Показов 2867. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем дня.
Есть отчёт в виде строки формата *.sup, его преобразую через
C#
1
            string s = System.IO.File.ReadAllText(str_fileNeame, Encoding.Default);
с последующей записью в word файл.
В данном отчёте отчёте результаты представлены в виде вот таких таблиц

Сводная таблица нагрузок
======================================== ======================================== ==
N опоры тип Сечение Расч. FX FY FZ DX DY DZ
(узел) опоры -------(силы, кН)-------- --(смещения,мм)--
======================================== ======================================== ==
(вставляя сюда всё равно сдвинулось)

Как задать поиск по тексту заголовка такой таблицы?
В голове только такой подход.
Паттерн ======(перенос)
любой символ(перенос)
любой символ(перенос)
=======(перенос)

Может есть что-то другое, какой то другой подход?

Буду признателен за помощь.
Миниатюры
Поиск по тексту подобие таблицы  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2022, 13:04
Ответы с готовыми решениями:

Поиск по тексту
Нужно организовать поиск в richTextBox с помощью кнопки "Найти далее". Чтобы находило первое вхождение, потом по нажатию на кнопку второе...

Поиск по тексту
Привет всем Пишу парсер на c#. Сам новичок В общем, нужно выполнить поиск по исходному коду страницы и найти ссылки оканчивающиеся на,...

Поиск по тексту
Здраствуйте. Хотелось бы поинтересоваться, можно ли канибуть програмно организоать поиск отдельных слов в тексте. И по возможности если...

25
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
05.08.2022, 04:47
Студворк — интернет-сервис помощи студентам
картинка
Миниатюры
Поиск по тексту подобие таблицы  
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
05.08.2022, 05:45
в общем посидел, подумал и набросал небольшой парсер с машиной состояний.


непосредственно класс Парсер
Кликните здесь для просмотра всего текста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
namespace Parsing
{
 
    public class Parser
    {
 
        public Parser(string fileName)
        {
            FileName = fileName;
        }
 
 
        // текущее состояние
        State currentState;    
 
        public string FileName { get; set; }
 
        Table extractedTable = null;
 
 
        public Table ExtractedTable
        {
            get
            {
                return extractedTable;
            }
 
            set
            {
                extractedTable = value;
            }
        }
 
        /// <summary>
        /// состояния для стейт машины 
        /// </summary>
        enum State
        {
            Title, // заголовок таблицы
            Header, // шапка 
            Content, // содержимое 
            End, // конец таблицы
            Error // состояние ошибки 
        }
 
 
        /// <summary>
        ///  машина состояний 
        /// </summary>
        public void Run()
        {
            using (StreamReader reader = new StreamReader(FileName))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
 
                    if (currentState == State.Error)
                    {
                        PrintError();
                        break;
                    }
                    else
                      if (currentState == State.Title)
                    {
                        ParseTitle(line);
                    }
                    else
                      if (currentState == State.Header)
                    {
                        ParseBorder(line);
 
                    }
                    else
                    if (currentState == State.Content)
                    {
                        ParseContent(line);
                    }
                    else
 
                    if (currentState == State.End)
                    {
                        PrintSucces();
                        break;
                    }
                }
            }
        }
 
 
        // функции переходов 
       void ParseBorder(string currLine)
        {
 
            if (currLine.Contains(ExtractedTable.Border))
            {
                ExtractedTable.BorderNum++;
                if (ExtractedTable.BorderNum == 1)
                    currentState = State.Header;
                else
             if (ExtractedTable.BorderNum == 2)
                    currentState = State.Content;
                else
                    currentState = State.Error;
            }
 
        }
 
        void ParseTableEnd(string currLine)
        {
            if (currLine.Contains(ExtractedTable.Border))
            {
                currentState = State.End;
            }
            else
                currentState = State.Error;
        }
 
        void ParseTitle(string currLine)
        {
            if (currLine.Contains(ExtractedTable.Title))
            {
                currentState = State.Header;
            }
        }
 
         void ParseContent(string currLine)
        {
            if (!ExtractedTable.ParseContent(currLine))
                ParseTableEnd(currLine);
        }
 
         void PrintError()
        {
            Console.WriteLine("Ошибка чтения таблицы");
        }
         void PrintSucces()
        {
            Console.WriteLine("Успешное чтение таблицы");
        }
    }
}
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
05.08.2022, 05:56
проверка



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
namespace Parsing
{
    public static class Program
    {
 
        private static void Main()
        {
            string fileName = @"PJB002.sup";
 
            Parser parser = new Parser(fileName);
 
            // для   таблицы нужно указать
            // рамку и название
 
            // первая таблица 
            var loadTable = new TheLoadTable
            {
                Title = ">>>  Оценка нагрузок на опоры трубопровода",
                Border = "=============="
            };
 
            parser.ExtractedTable = loadTable;
 
            parser.Run();
 
            // первая запись в таблице 
 
            var firstEntry = parser.ExtractedTable.Entries[0];
 
            Console.WriteLine(firstEntry);
 
        }
    }
}
вывел только первую запись, часть.
чтобы с форматированием не мучится.
Изображения
 
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
05.08.2022, 06:07
Последняя таблица.



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
namespace Parsing
{
    public static class Program
    {
 
        private static void Main()
        {
            string fileName = @"PJB002.sup";
 
            Parser parser = new Parser(fileName);
 
            // для   таблицы нужно указать
            // рамку и название
 
            // последняя таблица 
            var loadTableLast = new TheLoadTableLast
            {
                Title = ">>>  Оценка нагрузок на патрубки арматуры",
                Border = "----------------------------------------"
            };
 
 
            parser.ExtractedTable = loadTableLast;
 
            parser.Run();
 
            // первая запись в таблице 
 
            var firstEntry = parser.ExtractedTable.Entries[0];
 
            Console.WriteLine(firstEntry);
 
        }
    }
}
Первая запись последней таблицы
В файле в таблице пропущено значение,
поэтому выводится сообщение об ошибке.
Миниатюры
Поиск по тексту подобие таблицы  
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
05.08.2022, 06:35
Этот парсер небольшой набросок, что успел. Вместо обработки ошибок просто вывод сообщения.
В файле есть таблицы для которых он не подойдет, программу ещё нужно доработать.
Можно дописать парсер, чтобы все таблицы собирал в коллекцию за один проход.
Создать производные классы для остальных таблиц, переопределить методы...
и тд и тп ...
Вложения
Тип файла: rar ConsoleApp1_Forum.rar (6.0 Кб, 0 просмотров)
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
05.08.2022, 13:54  [ТС]
js_advent, круто! Спасибо. Буду разбираться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2022, 13:54

Поиск по тексту
Задача поискать в большом тексте определённое слова или отравок текста. практически во всех языках есть фенкцим которые могут указать...

поиск по тексту
Привет всем. У меня такая задач. Нужно было разобрать файл, обработать его(вытащить из него нужное) и записать в др файл(с этими задачами ...

Поиск по тексту
Привет, помогите нубу, пожалуйста) Надо выполнить поиск по тексту но что бы он проходил по такому алгоритму: Я ввожу 2 фразы :начало и...

Поиск по тексту
помогите решить такое задание, подается массив текста, найти позицию первой даты, если нет то выдать сообщение что нет, формат даты такой...

Поиск по тексту
Вопрос как организовать поиск по тексту. предположим текст в документе разделён на строки Я могу искать подстраку в строке. Но...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru