Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
22 октября 2018 г. 12:30

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

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

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

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

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


14

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

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



0

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


0

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

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

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

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

0

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

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

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

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




0

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

0

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

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

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

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





0

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

QT       += core gui qaxcontainer

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

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

0

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


CONFIG += qaxcontainer
0

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

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");

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

0

Вот так оказывается можно читать 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;
1

Вы - Молодец!

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

0

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

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

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

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



0

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

0

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

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;
}
0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
v
17 января 2019 г. 11:51
vitalir12

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20баллов,
  • Очки рейтинга-10
v
17 января 2019 г. 11:49
vitalir12

C++ - Тест 002. Константы

  • Результат:50баллов,
  • Очки рейтинга-4
v
17 января 2019 г. 11:13
vitalir12

C++ - Тест 003. Условия и циклы

  • Результат:28баллов,
  • Очки рейтинга-10
Последние комментарии
I
16 января 2019 г. 8:06
IscanderChe

Заработало. Забыл model->select(); вписать.
I
16 января 2019 г. 8:02
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
16 января 2019 г. 7:51
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
16 января 2019 г. 7:43
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Сейчас обсуждают на форуме
18 января 2019 г. 11:26
nayk1982

Для Desktop делал так: void pause(int ms){ QTimer timer; timer.setInterval( qBound(1, ms, 3600000) ); timer.setSingleShot(true); QEventLoop loop; QObject::connect(&...
17 января 2019 г. 12:01
Алексей Внуков

у меня просто есть отдельное поле с чекбоксамими какие колонки нужно отображать CheckBox { id: checkBox text: qsTr("some text") checked: true onC...
15 января 2019 г. 16:53
Михаиллл

Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
15 января 2019 г. 12:52
BlinCT

Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы