|
1 / 1 / 0
Регистрация: 15.12.2018
Сообщений: 260
|
|
Парсинг docx документа21.12.2021, 21:46. Показов 1350. Ответов 11
Метки нет (Все метки)
Ситуация такая: есть парсер, который парсит docx библиотекой documentformat.openxml. Парсинг берёт все "раны" (теги в xml, в которых располагаются куски текста по разным стилям) и заменяет определенный текст на нужные данные. Возможно, выбрана не та библиотека, но тогда мне нужна подсказка, потому что сейчас происходит нечто невообразимое: т.к. парсинг работает с xml, соответственно создавать и редактировать документ можно только в xml, потому что набирать текст в docx - значит стрелять себе в ногу, ибо этот самый текст располагается в "ранах" непредсказуемо, т.е. даже одно слово может располагаться в разных "ранах" и парсинг не может заменить текст в этих ранах. Но это пол беды, потому что даже если весь текст был написан через xml и все раны сформированы руками, то при редактировании (например, постановка пробела в любой части документа) текст word вновь формирует ВЕСЬ ТЕКСТ документа в свои созданные раны и опять всё по новой. Есть люди, которые каким-то другим образом формируют документы на основе шаблонов, какой метод можно использовать, потому что этот потихоньку сводит меня с ума
0
|
|
| 21.12.2021, 21:46 | |
|
Ответы с готовыми решениями:
11
Парсинг текстового документа? |
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|
| 22.12.2021, 07:33 | |
|
Ziltoid Townsen, тут проблема в тупом парсере, а не в Word'е или используемой библиотеке. С точки зрения содержимого, а не стилей, произвольная последовательность run'ов является одной строкой и парсер их так и должен рассматривать. Если так будет удобнее, то соседние run'ы с одним набором атрибутов можно смело объединять в один, если Word это нормально воспринимает.
Так что это вопрос прямоты рук программиста писавшего парсер. documentformat.openxml тут ни причём.
0
|
|
|
1 / 1 / 0
Регистрация: 15.12.2018
Сообщений: 260
|
|||||||
| 22.12.2021, 08:57 [ТС] | |||||||
0
|
|||||||
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|
| 22.12.2021, 09:15 | |
Сообщение было отмечено Pilarentes как решение
Решение
Ziltoid Townsen, не уверен, что вы осилите такую задачу.
Один из вариантов: завести некий класс TextRunnerString, который будет представлять из себя абстрактную строку. Этот класс будет содержать список объектов Text, а так же набор методов для поиска и замены строк (или других манипуляций со строкой). Поиск подстроки или слова, в этом классе, будет идти по связному списку (надеюсь знаете что такое?) из объектов Text. Замена слова, что пересекает границу раннера - выкусывание его самой левой части и замена на полное слово в самом правом раннере.Я очень сомневаюсь, что вы вообще поняли что я советую) Посмотрите код класса StringBuilder. Он под капотом нечто похожее делает. У него там коллекция массивов символов, кажется по 8К элементов каждый, и он умеет выполнять различные манипуляции с этим делом, чтобы в конце получить целую строку.
0
|
|
|
1 / 1 / 0
Регистрация: 15.12.2018
Сообщений: 260
|
|
| 22.12.2021, 09:43 [ТС] | |
|
0
|
|
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|
| 22.12.2021, 09:56 | |
|
Ziltoid Townsen, не пустой. Я бы просто убрал упоминание слова, что пересекает несколько раннеров, из всех ранныеров, кроме одного. Чтобы не придумывать, как новое слово разбить, чтобы так же раскидать по раннерам.
0
|
|
|
1 / 1 / 0
Регистрация: 15.12.2018
Сообщений: 260
|
||
| 22.12.2021, 10:03 [ТС] | ||
|
0
|
||
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|||
| 22.12.2021, 10:09 | |||
|
0
|
|||
|
1 / 1 / 0
Регистрация: 15.12.2018
Сообщений: 260
|
||
| 22.12.2021, 10:11 [ТС] | ||
|
0
|
||
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
||||||
| 22.12.2021, 10:17 | ||||||
|
Ziltoid Townsen, агась. Только нужно точно знать, что атрибуты этих ранов совпадают. Если различаются, то так сделать будет нельзя и слово придётся удалять из всех ранов, кроме одного.
Вот представьте себе такой текст: Привет. Тут слово состоит из трёх "ранов":
0
|
||||||
|
1 / 1 / 0
Регистрация: 15.12.2018
Сообщений: 260
|
|
| 22.12.2021, 10:23 [ТС] | |
|
0
|
|
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|
| 22.12.2021, 14:37 | |
|
Попробуйте)
0
|
|
| 22.12.2021, 14:37 | |
|
Помогаю со студенческими работами здесь
12
Парсинг ссылок из HTML документа
Парсинг списка из html документа Парсинг с текстового документа в текстбокс Парсинг XML документа со сложной структурой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|