Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/131: Рейтинг темы: голосов - 131, средняя оценка - 4.52
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Архитектура: парсинг и выгрузка текстовиков

11.03.2020, 10:51. Показов 32420. Ответов 421

Студворк — интернет-сервис помощи студентам
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
Цитата Сообщение от JeyCi Посмотреть сообщение
так и не собрала эти все объекты этого класса в group class...
вроде уже собрала...
осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа...
а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль;
б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid...
===
!! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о:
Цитата Сообщение от JeyCi Посмотреть сообщение
полагаю тут Наследования никакого не пригодится?
... или как раз тут (при выборе направления выгрузки) его (наследование) делать??
===
Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями):
чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)...
p.s.
классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют...
p.p.s.
вывести конечные интерфейсы с определёнными методами записи на кнопки...
===
ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ??
===
на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы)
птицами отмечены уже кое-как реализованные классы (2 птицы)
курсивные стрелки - отсутствие наследования


Добавлено через 7 минут
вобщем вопрос:
class Table и класс I_Tbl_Show - объединить или нет?

Добавлено через 10 минут
p.p.s.
чтобы избежать проблем Ромба и такого:
Неоднозначность при множественном наследовании
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут нужно виртуальное наследование.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 10:51
Ответы с готовыми решениями:

Проверка двух текстовиков
Написать прогу на языке Си, проверяющую, совпадают ли тексты в двух файлах #include <stdio.h> #include <stdlib.h> ...

Access модуль объединения текстовиков
Добрый день. Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и...

Сделать скрипт для вывода текстов из текстовиков
Здравствуйте! Не могли бы помочь сделать скрипт для вывода текстов песен из текстовиков в папке. Расскажу подробней: есть папка с...

421
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
12.04.2020, 20:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от bedvit Посмотреть сообщение
Ищите .lib, а лучше используйте исходники.
посмотрю, спасибо...
видела здесь упоминание про amalgamation... при билдинге в MSVS...
U++ пока осваиваю...
#177 и #179 - всё-таки возможности чтения json'ов SQLite'ом - не всегда пользуются спросом - может, действительно, само чтение неструктурированных данных json - удобнее на стороне кода C++... это не вопрос, а предупреждение посетителям ветки - на SQLite читать json интересно, но проще с нормальной библиотекой на ООП читать много-уровневую по количеству вложенностей строку... имхо
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
14.04.2020, 06:20  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
возможности чтения json'ов SQLite'ом - не всегда пользуются спросом
но в принципе считать можно - главное в свои запасы know-how внести пару рабочих моментов: по fullkey parse Array, parse Object условно... и finalQ.rowid для красоты... и можно разгребать через точку с запятой (как в полноценных бд, не Access)
P.S.
regexp built0in function даёт только true or false... но можно и свою function сделать...
P.P.S.
С++ Выбор контейнера
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
14.04.2020, 17:33  [ТС]
и наконец - online-SQLFiddler
- задаём DDL Create table... и по кнопке Browser - видим привычную глазу UML- диаграмму таблицы... потом можно снова вернуться в DDL Editor... - иногда удобнее 1 раз увидеть, чем 100 раз прочитать свой Create Table код...
e.g.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE dogs (
    TYPE       TEXT,
    color TEXT
);
 
INSERT INTO dogs(TYPE, color) 
VALUES('Hunting','Black'), ('Guard','Brown');
CREATE TABLE cats (
    TYPE       TEXT,
    color TEXT
);
 
INSERT INTO cats(TYPE,color) 
VALUES('Indoor','White'), 
      ('Outdoor','Black');

P.S.
самое интересное - то, что это по сути чистая Структура (или Класс), только последнему можно задать свои методы... а не быть зажатыми в рамки SQL-языка, функционального по своей природе...
т.е. по сути на Клиенте мы можем расширить функционал Сервера, что есть очень удобно... да и такая прямая связь между схемой таблицы БД и классом ООП (например, на С++) - УПРОЩАЕТ как понимание правил нормализации БД через Декомпозицию, где надо, так и способы вытягивания из БД инфо во View из Model(бизнес-логики) и написание Controller'a на любом удобном языке... Выбор языка - Py vs C++ vs Java (для Клиента) ...
Этот Вывод ветки мне понравился больше всего -
- теперь не надо будет всегда лазить в бд с оглядкой на SQL, не надо увлекаться писаниной по массивам, словарям, коллекциям vba, а просто создать нужные (или даже по сути уже имеющиеся классы даже иногда по аналогии с диаграммой бд) и можно расширить их своими методами... в Абсолютно любом направлении... на любом, предпочитаемом для тех или иных задач, языке....
P.P.S.
После всей полученной инфо при знакомстве с языком - думаю, я даже смогу ПО-НОВОМУ посмотреть на Правила Нормализации БД !!! (хоть они и умалчивают о наследовании и пропагандируют связи - но для целей разумной Декомпозиции - лучше знать и то и другое - чтобы малыми затратами состыковать Сервер с Клиентом)... имхо
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
15.04.2020, 05:47  [ТС]
LearnCpp - полная подборка для начинающих
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
24.04.2020, 13:23  [ТС]
Цитата Сообщение от bedvit Посмотреть сообщение
конечную цель: Написать свою СУБД на С++
на это пока не претендую,
а вот проверить корректность имеющейся схемы БД - не помешает...Технологии организации, хранения и обработки данных - начало по проектированию БД - быстро и легко написано... - более подробно о выстраивании Функциональных Зависимостей - Рудикова Л.В. Проектирование Баз Данных
p.s.
всё равно, жаль, что в SQLite нет Хранимых процедур - в этом плане MS SQL Server Express удобнее...
0
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
24.04.2020, 21:23
Цитата Сообщение от JeyCi Посмотреть сообщение
всё равно, жаль, что в SQLite нет Хранимых процедур
В SQLite другая парадигма. Нельзя так сравнивать.

В SQLite вы можете расширить функциональность любой собственной функцией. В некотором смысле такую функцию можно назвать хранимкой.
https://stackoverflow.com/ques... -in-sqlite
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
25.04.2020, 04:15  [ТС]
Цитата Сообщение от ablex Посмотреть сообщение
расширить функциональность любой собственной функцией.
да пока не думала об этом... не об этом речь была...
а о том, что в Хранимой Процедуре можно хранить набор SQL-инструкций, которые запускаются все под одним общим именем... - просто удобно... но в SQLite - это невозможно, надо прописывать все SQL-запросы на Клиенте... а на сервере можно повыбрасывать несколько VIEWs друг на основании друга - НО общий итог, что-то не вытягивается на клиент, только если на клиенте заново пройти цепочку SQL-инструкций...
а SQL-запросы (которые имею) иногда бывают длииинные или со множеством подзапросов вложенных др. в др. ... а легче было бы их написать для выполнения и читабельности просто последовательно др. за др. - и под одним общим именем... но похоже придётся писать длинно и закрученно (вкладывая др в др подзапросы)
0
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
25.04.2020, 17:03
Цитата Сообщение от JeyCi Посмотреть сообщение
но в SQLite - это невозможно, надо прописывать все SQL-запросы на Клиенте...
У SQLite нет понятий сервер и клиент. Это встраиваемая БД.

JeyCi, Вы меня не слышите. Еще раз: вы можете описать любые функции, расширяющие функциональность в нужном вам направлении на С или С++, добавить их для использования в запросах. Таким образом все сложные подзапросы могут быть спрятаны в эти функции.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
26.04.2020, 16:03  [ТС]
Цитата Сообщение от ablex Посмотреть сообщение
расширяющие функциональность в нужном вам направлении на С или С++,
а я хочу всё на SQL через точку с зпятой... в принципе нашла какой-то WITH t AS (SELECT) - хоть так... в принципе, и BEGIN... COMMIT присобачить можно... в принципе, и через временные таблицы можно, потом их удаление - если небольшие, то может быть рабочий вариант - только для скорости обязательно явно задавать транзакции, ну и ещё в настройках покопаться, чтобы быстродействие придать...
Цитата Сообщение от ablex Посмотреть сообщение
на С или С++, добавить их для использования в запросах. Таким образом все сложные подзапросы могут быть спрятаны в эти функции.
спасибо над этим тоже подумаю...
если у вас есть какой простенький пример чего угодно под рукой (чтобы SQL+C++), отражающий ваш совет - может, приложите в ветке?.. для примера... (если нет, то и ладно, - сама поищу)... в любом случае спасибо за совет - Клиент ведь всё равно буду делать на С/С++

Добавлено через 4 минуты
P.S.
2.1. The PARTITION BY Clause - тоже радуют

Добавлено через 3 минуты
да и вообще мнооого интересного
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
28.04.2020, 06:20  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
пример чего угодно под рукой (чтобы SQL+C++),
кстати имеется в сети - здесь

Добавлено через 2 минуты
и на of-сайте - Create Or Redefine SQL Functions
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
28.04.2020, 14:16  [ТС]
Adding Stored Procedures to SQLite
да и вообще на любом языке
- и простенький пример на SQL Server - для сравнения
p.s.
в принципе и те же самые Loadable Extension (regex) (dll/so) можно подрядить... (как и др либы)

Добавлено через 45 минут
p.p.s.
user-defined function in SQLite
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
29.04.2020, 09:36  [ТС]
и вот интересная статья вырисовывается:
Принцип разделения ответственности и ORM
-- всё-таки Model.Context и View.Context смешать в принципе не получится - если между ними Controller.Context... но некоторые умудряются из View нагадить в Model... - и такое случается, когда MVC ContextS выбираются не спецом по предметной области, а IT'шником, завёрнутом на своих баранах... и оба не услышали др. др.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
30.04.2020, 20:32  [ТС]
ORM выступает медиатором между кодом доменной модели и базой данных.
- ещё одно доказательство того, что многие архитектурные решения уже реализованы в соответствующих библиотеках - just use it...
p.p.s.
Entity Framework даёт связку appl. и DB через ORM (Object Relational Mapping) и ADO.NET -- правда на C#.NET... и этим значительно сокращает количество кода... - главное - правильно задать binding...
- следует подумать об архитектуре проекта, как о возможности уходить от чистого кодинга к реально удобной и быстрой разработке уже имеющимися инструментами... - теперь понимаю силу правильно выбранных библиотек - они убирают проблему выбора архитектурных решений - уже в себе содержа эти выгодные архитектурные решения - и этим упрощая жизнь разработчику... но такой Edge уже скорее не к чистым либам относится, а к Framework'ам...
на имеющихся же в С++ библиотеках - многое, действительно, ещё придётся писать самим...
-- хотя по линку от DrOffset по ветке ранее - и для C++ ORM доступны...

Добавлено через 2 минуты
или здесь - Новая SQLite ORM для C++

================

Цитата Сообщение от ablex Посмотреть сообщение
У SQLite нет понятий сервер и клиент. Это встраиваемая БД.
спасибо, за правку - автоматически так выражаюсь - имея ввиду код С++, как клиент, и SQLite Tables, как сервер... а, вообще, конечно, встраивается - если build Static All... да и dll'ем встраивается - динамически
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
06.05.2020, 15:10  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
многие архитектурные решения уже реализованы в соответствующих библиотеках
это лучшие достижения на мой view:
C++17 Parallel Algorithms of the Standard Template Library
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
23.05.2020, 09:42  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
это лучшие достижения на мой view:
правда при использовании их всё равно надо самому продумывать и реализовывать thread-safety... полагаю, можно стандартно mutex'ами (пример, на соседней ветке, вероятно)
============

Добавлено через 1 минуту
кстати, паттерны на форуме тоже встречаются:
цепочка обязанностей
--- если разные файлы придётся запускать по разным шагам обработки... имхо (по ТЗ из #1)

Добавлено через 13 минут
=======
Цитата Сообщение от bedvit Посмотреть сообщение
3.Если вы хотите перейти на С++, потому что это быстрее - это не очевидный результат. Возможно стоит поспрашивать у спецов, так ли это и взлетит ли данный подход
Цитата Сообщение от JeyCi Посмотреть сообщение
а на Python - честно говоря, подгрузка взлетает с использованием асинхронности
действительно... там ещё и корутины, похоже, - чтобы взлетело... т.е. async-await...
-- в C++20 хоть корутины и вводят и можно использовать co-await, но async к нему всё равно делать придётся самой... -- это пока уровень выше моего в с++ (да и компилятор gcc_9_3 c корутинами из boost пока не справился -- или созрею на компилятор Microsoft из VS или установлю библиотеки std c++20 когда разгребусь с тем, с чем разбираюсь сейчас)
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
24.05.2020, 06:46  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
кстати, паттерны на форуме тоже встречаются:
цепочка обязанностей
кстати и в IDE могут встречаться уже встроенные реализации некоторых паттернов
Цитата Сообщение от DrOffset Посмотреть сообщение
паттерн прототип. Есть хорошая новость, Qt его поддерживает для QStandardItem
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
27.05.2020, 19:39  [ТС]
м-да... и т.к. файлов на входе будет ~500 шт (разношёрстных) - то всё-таки на Потоки с++ я ещё посмотрю...
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В реализациях - всегда блокируешь мьютекс m_mx, потом изменяешь или выводишь на экран строку
... например, каждую подгруженную из сети... наконец вырисовываются Input этого тз:
в отдельном от GUI потоке брать String с каждого http и направлять её в WriteFile() [м. наподобие ReadFile() overlapped mode] -- каждую строку в свою [свой поток] асинхронную запись в свой файл... ~500 потоков запустить за раз... ускорится ли? есть ли смысл?
(но, конечно, для такого тз - файлы из сети - всё-таки скорость internet-connection тоже важна, чтобы ускоряться)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.05.2020, 19:57
Цитата Сообщение от JeyCi Посмотреть сообщение
в отдельном от GUI потоке брать String с каждого http и направлять её в WriteFile() [м. наподобие ReadFile() overlapped mode] -- каждую строку в свою [свой поток] асинхронную запись в свой файл... ~500 потоков запустить за раз... ускорится ли? есть ли смысл?
Конечно нет, надо пул потоков использовать.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
27.05.2020, 20:21  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
надо пул потоков использовать.
да вы правы - это получше... (!спасибо, что расставляете приоритеты, а то на пустой теории я ещё долго буду подбирать соотв. инструменты - когда слово помню, а поможет или что-то др поможет ещё не тестила)...
сама-то я его (thread pool) пока не напишу, наверно... но в Ultimate++ есть
class AsyncWork
Represents a job that can be executed in another thread and can return a value. It is similar to future/promise pattern, but it allows cancelation and is based on U++ thread pool shared with CoWork.
причём coWork это у них multithreading (по количеству ядер, вроде автоопределяется само)...
... вот и застопорилась, как возможностями этой ide, да и языка в целом, соорудить бы такое ещё очень расплывчатое понятие - ускорить (асинхронно и многопоточно)... и не попасть в race condition, если в этой ide родная AsyncWork заявляется, как, видимо, MT... или эту часть кода на std лучше реализовать?.. тогда, может, направите по какому линку?
===
хотя вроде Loop по линкам синхронизации, наверно не потребует?.. - каждый loop вроде не share data?? (для такого тз)

Добавлено через 7 минут
и что использовать - futures/promises (которые пинимают итог) - в той ide это AsyncWork - или variable condition (которые прослушивают постоянно) ? (последнее мне для запросов GET наверно не надо, это наверно для socket'ов)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.05.2020, 20:27
Цитата Сообщение от JeyCi Посмотреть сообщение
сама-то я его (thread pool) пока не напишу, наверно... но в Ultimate++ есть
Воспользуйся std::async(std::launch::async
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2020, 20:27

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и как ее исправить?

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области человеку.желательно книгами.спасибо.

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку "Проверить соединение" Я прочитал, что это возможно из за того, что моя система 64, а...

Архитектура бд
Я начинающий php-разраб. Пишу свой проект для своего города. Но встал вопрос о архитектуре. Пользователь создает свою страницу с...

Архитектура БД
Доброго времени суток.Задание написать АИС Учёт абонентов телефонной сети предприятия. Краткое описание предметной области: В состав...


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru