Михаиллл
22 жовтня 2018 р. 18:30

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

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

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

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

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


3

Вам це подобається? Поділіться в соціальних мережах!

14
Александр Панюшкин
  • 22 жовтня 2018 р. 18:34

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

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



    Михаиллл
    • 22 жовтня 2018 р. 18:52

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


      Evgenii Legotckoi
      • 22 жовтня 2018 р. 18:59

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

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

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

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

        Александр Панюшкин
        • 22 жовтня 2018 р. 19:02
        • (відредаговано)

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

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

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

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




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

            Михаиллл
            • 22 жовтня 2018 р. 22:42

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

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

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

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





              Михаиллл
              • 23 жовтня 2018 р. 19:35

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

              1. QT += core gui qaxcontainer

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

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

                Evgenii Legotckoi
                • 24 жовтня 2018 р. 00:27

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


                1. CONFIG += qaxcontainer
                  Михаиллл
                  • 24 жовтня 2018 р. 17:03

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

                  1. QT += core gui axcontainer

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

                  1. QAxObject axObject("Word.Application");

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

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

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

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

                    Михаиллл
                    • 25 жовтня 2018 р. 18:28

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

                    1. QAxObject wordApplication("Word.Application");
                    2. QAxObject *documents = wordApplication.querySubObject("Documents");
                    3. QAxObject *document = documents->querySubObject("Open(const QString&, bool)", "C:\\ForResume\\2.docx", true);
                    4. QAxObject *words = document->querySubObject("Words");
                    5. QString textResult;
                    6. int countWord = words->dynamicCall("Count()").toInt();
                    7. for (int a = 1; a <= countWord; a++){
                    8. textResult.append(words->querySubObject("Item(int)", a)->dynamicCall("Text()").toString());
                    9. }
                    10. qDebug()<<textResult;
                      Evgenii Legotckoi
                      • 25 жовтня 2018 р. 18:38

                      Вы - Молодец!

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

                        Михаиллл
                        • 25 жовтня 2018 р. 18:52

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

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

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

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



                          Evgenii Legotckoi
                          • 26 жовтня 2018 р. 03:18

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

                            Михаиллл
                            • 29 жовтня 2018 р. 18:37
                            • (відредаговано)

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

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

                              Коментарі

                              Only authorized users can post comments.
                              Please, Log in or Sign up
                              • Останні коментарі
                              • Evgenii Legotckoi
                                16 квітня 2025 р. 17:08
                                Благодарю за отзыв. И вам желаю всяческих успехов!
                              • IscanderChe
                                12 квітня 2025 р. 17:12
                                Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
                              • AK
                                01 квітня 2025 р. 11:41
                                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                              • Evgenii Legotckoi
                                09 березня 2025 р. 21:02
                                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                              • VP
                                09 березня 2025 р. 16:14
                                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…