Михаиллл
МихаилллҚаз. 22, 2018, 8:30 Т.Ж.

Чтение текста и добавление в массив

массив, текст

Здравствуйте.

Хочу сделать чтение доковских файлов разного размера и записывание их куда либо, скорее всего в массив и в файл.

Скажите пожалуйста, как правильно записать такой текстовый массив?


Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

14
Александр Панюшкин
  • Қаз. 22, 2018, 8:34 Т.Ж.

Мне кажется, что вопрос не совсем корректно поставлен. Вордовские файлы - это не только текст.

Можно о задаче подробнее? Что за файлы будут?



    Михаиллл
    • Қаз. 22, 2018, 8:52 Т.Ж.

    Текстовый файлы - это резюме. Планирую сделать их чтение, хранение, чтение из массива и поиск.


      Evgenii Legotckoi
      • Қаз. 22, 2018, 8:59 Т.Ж.

      резюме подразумевает наличие вёрстки и т.д.?

      Как бы целые огранизации разработчиков, типо разработчиков LibreOffice и OpenOffice, с немаленькими бюджетами и штатами специалистов, а также большим комьюнити вольных разработчиков, которые пытаются помогать развитию этих проектов, до сих пор не смогли сделать 100 процентную поддержку импорта доковских документов, а вы хотите это сделать в одиночку?

      Мне кажется, что вы не осознаёте масштаб проблемы )))

      Что именно хотите читать оттуда? Вся информация содержится в блоках вёрстки с кучей служебной информации, которую просто так не выдрать с документов типа *.doc, *.docx

        Александр Панюшкин
        • Қаз. 22, 2018, 9:02 Т.Ж.
        • (өңделген)

        Я бы начал изучать эту тему с вот этой ссылки - https://wiki.qt.io/Handling_Microsoft_Word_file_format

        Тут совсем не много текста, но очень много информации.

        Но я бы не взялся за такую работу - она, на мой взгляд, не реализуема. Резюме не стандартизованы, не говоря уже об оформлениях и прочем.

        Дешевле посадить девочку, которая это будет копипастить.




          Вот и я о том же )) овчинка выделки не стоит. Проще написать паука, который скачает все открытые резюме на хедхантере, или каком-нибудь ином ресурсе.

            Михаиллл
            • Қаз. 22, 2018, 12:42 Т.Қ.

            Спасибо за ссылку.

            Мне нужна довольно простенькая  программка, поэтому справлюсь сам.

            Для меня пока стоит вопрос с чтением.

            Можно ли с помощью ActiveX записывать в QAxContainer и потом как то сохранять и читать этот контейнер?





              Михаиллл
              • Қаз. 23, 2018, 9:35 Т.Ж.

              Попробовал добавить

              QT       += core gui qaxcontainer

              Выдает ошибку неизвестного модуля.

              Скажите пожалуйста, у меня не полная версия QT или нужно скачивать какую-то библиотеку?

                Evgenii Legotckoi
                • Қаз. 23, 2018, 2:27 Т.Қ.

                В той ссылке на документацию, что вы привели, написано иначе


                CONFIG += qaxcontainer
                  Михаиллл
                  • Қаз. 24, 2018, 7:03 Т.Ж.

                  Спасибо. Не заметил. Как оказалось правильно теперь писать так.

                  QT       += core gui axcontainer
                  

                  Но когда пишу так

                   QAxObject   axObject("Word.Application");

                  выдает ошибку

                  D:\QTProject\ReaderResume\main.cpp:9: ошибка: 'QAxObject' was not declared in this scope

                  QAxObject   *documents = axObject.querySubObject("Documents");

                  Не знаете, как правильно прочитать доковский файл используя это?

                    Михаиллл
                    • Қаз. 25, 2018, 8:28 Т.Ж.

                    Вот так оказывается можно читать doc  и  docx

                    QAxObject   wordApplication("Word.Application");
                        QAxObject *documents = wordApplication.querySubObject("Documents");
                        QAxObject *document = documents->querySubObject("Open(const QString&, bool)", "C:\\ForResume\\2.docx", true);
                        QAxObject *words = document->querySubObject("Words");
                        QString textResult;
                        int countWord = words->dynamicCall("Count()").toInt();
                        for (int a = 1; a <= countWord; a++){
                        textResult.append(words->querySubObject("Item(int)", a)->dynamicCall("Text()").toString());
                        }
                        qDebug()<<textResult;
                      Evgenii Legotckoi
                      • Қаз. 25, 2018, 8:38 Т.Ж.

                      Вы - Молодец!

                      Там получается сплошной текст?

                        Михаиллл
                        • Қаз. 25, 2018, 8:52 Т.Ж.

                        Нет, с пробелами и закодированными спец символами..

                        Забыл добавить строчку на закрытие файла

                        document->dynamicCall("Close (boolean)", false);

                        И еще беда, если в тексте картинка есть, то появляется всплывающие окно и нужно нажимать ок, не знаю как убрать...



                          Evgenii Legotckoi
                          • Қаз. 25, 2018, 5:18 Т.Қ.

                          К сожалению, тут придётся документацию на ActiveX зачитывать до дыр, как мне кажется (((((

                            Михаиллл
                            • Қаз. 29, 2018, 8:37 Т.Ж.
                            • (өңделген)

                            Еще оказалось, что для адекватной работы нужно делать замену слэшей при запросе имени, иначе не работает

                            void MainWindow::on_AddResumeButton_clicked()  //Function and button Add resume
                            {
                                QString setOpenResumeName=(QFileDialog::getOpenFileName(0, "Открыть резюме в формате ворд", "", "*.doc *.docx *.rtf"));//путь , вариант расширения "*.cpp *.h"    
                            qDebug()<<setOpenResumeName;
                                setOpenResumeName.replace(QRegExp("[/]"), "\\"); //замена символов   
                            qDebug()<<setOpenResumeName;
                                QAxObject   wordApplication("Word.Application");
                                QAxObject *documents = wordApplication.querySubObject("Documents");
                                QAxObject *document = documents->querySubObject("Open(const QString&, bool)", setOpenResumeName, true);
                                QAxObject *words = document->querySubObject("Words");
                                QString TextResume;
                                int countWord = words->dynamicCall("Count()").toInt();
                                for (int a = 1; a <= countWord; a++){
                                    TextResume.append(words->querySubObject("Item(int)", a)->dynamicCall("Text()").toString());
                                }
                                document->dynamicCall("Close (boolean)", false);
                                TextResume.replace(QRegExp("[\r]"), "\r\n"); //замена символов
                                qDebug()<<TextResume;
                            }

                              Пікірлер

                              Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                              Кіріңіз немесе Тіркеліңіз
                              Г

                              C++ - Тест 001. Первая программа и типы данных

                              • Нәтиже:66ұпай,
                              • Бағалау ұпайлары-1
                              t

                              C++ - Тест 001. Первая программа и типы данных

                              • Нәтиже:33ұпай,
                              • Бағалау ұпайлары-10
                              t

                              Qt - Тест 001. Сигналы и слоты

                              • Нәтиже:52ұпай,
                              • Бағалау ұпайлары-4
                              Соңғы пікірлер
                              G
                              GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                              Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                              d
                              dblas5Шілде 5, 2024, 11:02 Т.Ж.
                              QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                              k
                              kmssrАқп. 8, 2024, 6:43 Т.Қ.
                              Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                              АК
                              Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                              Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                              Енді форумда талқылаңыз
                              Evgenii Legotckoi
                              Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                              добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                              F
                              FynjyШілде 22, 2024, 4:15 Т.Ж.
                              при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                              BlinCT
                              BlinCTМаусым 25, 2024, 1 Т.Ж.
                              Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                              BlinCT
                              BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                              Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                              Evgenii Legotckoi
                              Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                              Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                              Бізді әлеуметтік желілерде бақылаңыз