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

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

06.07.2022, 13:04. Показов 2833. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru