Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224

Структура текстового документа при компоненте Treeview

01.05.2015, 17:37. Показов 1436. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, допустим что есть текстовый документ в формате ".rtf" загруженный с помощью OpenFileDialog в RichTextBox, можно ли сделать так что бы он вывел структуру текстового файла (т.е пункты, подпункты) этого документа в Treeview?

Добавлено через 2 часа 1 минуту
Может кто помочь?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.05.2015, 17:37
Ответы с готовыми решениями:

TreeView: по нажатию на объект дерева, выводить в Memo информацию, загруженную с текстового документа
Как по нажатию объекта дерева, выводить в мемо информацию загруженную с текстового документа? Я пробовал делать так: If...

Открытие в Webbrowser определенного html-документа при клике на item Treeview
Всем доброго времени суток! Помогите пожалуйста справиться мне с такой задачей: Есть Treeview и webbrowser. В Treeview ссылки на статьи...

Удаление текстового документа при его закрытии
Надо создать файл, который копирует весь текст из textBox1 и потом открывает его, а когда ползователь закрывает то он удаляется.

17
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
01.05.2015, 18:52
Можно, но сложно. Для этого придется разобраться как эти пункты и подпункты выглядят в RTF, и код придется разбирать программно самому, а это непросто. Если бы это делалось в WPF, то там возможности для этого получше, а в винформах думаю будет сложновато.
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
01.05.2015, 18:57  [ТС]
ну должен быть какой небуть способ же, или что то подобие
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
01.05.2015, 18:59
Ну способ есть и не один. Либо разбирать код ртф вручную, либо искать готовую библиотеку, с помощью которой можно это сделать, либо использовать библиотеки WPF. Другие способы мне не известны(хотя утверждать, что их нет тоже не буду).
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
01.05.2015, 19:08  [ТС]
жаль что не каких примеров нету на сайте, все обыскал
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
01.05.2015, 20:43
Андрей_74, Если тебя устроит вариант с библиотеками WPF(не обязательно создавать впф-проект, можно просто подключить нужные библиотеки), то примерно направление могу задать.
Подключить надо библиотеки
PresentationFramework
PresentationCore
System.Xaml
WindowsBase

Далее
C#
1
2
3
using System.Windows.Documents;
using System.Windows.Markup;
using System.Xml;
Следующий код создаст объект документа FlowDocument и загрузит из файла
C#
1
2
3
4
5
6
                var doc = new FlowDocument();
                var range = new TextRange(doc.ContentStart, doc.ContentEnd);
                using(FileStream stream = new FileStream(rtfFileName, FileMode.Open))
                {
                    range.Load(stream, DataFormats.Rtf);
                }
Дальше с объектом FlowDocument можно работать непосредственно, либо сохранить как XML. Для этого понадобится XamlWriter. Так можно сохранить хмл в файл.
C#
1
2
3
                var xwriter = new XmlTextWriter(xmlFileName, Encoding.UTF8);
                xwriter.Formatting = Formatting.Indented;
                XamlWriter.Save(doc, xwriter);
Так получить текст хмл
C#
1
                var xmlText = XamlWriter.Save(doc);
C XML работать проще, да и структуру получившегося документа можно визуально изучить, даже если не будешь работать с хмл, то зная структуру FlowDocument для интересующего тебя файла, можно будет легко его обработать. Ну, а так документацию по флаудокумент изучай.

В аттач прилагаю проект, написанный для примера в другой теме, но добавил туда третий пункт меню, с помощью которого можно выбрать ртф-файл и отобразить его в ричтекстбоксе как хмл. Код немного отличается от того, что представил в топике, но это для того, чтобы вывести отформатированный хмл-код в ртф. Если просто воспользоваться
C#
1
                richTextBox1.Text = XamlWriter.Save(doc);
то будет все слеплено вместе.
Вложения
Тип файла: rar savertf.rar (47.5 Кб, 4 просмотров)
1
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
02.05.2015, 11:57  [ТС]
Спасибо сейчас попробую

Добавлено через 14 часов 16 минут
Вроде все понятно, но как он будет отображать саму структуру текстового документа (Глава-Тема-Подтема) не совсем я понял
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.05.2015, 12:24
Цитата Сообщение от Андрей_74 Посмотреть сообщение
но как он будет отображать саму структуру текстового документа
В принципе никак Ты в данном случае просто вместо текстового формата, который не можешь обработать, получаешь либо готовый объект FlowDocument и его можно уже обходить и строить дерево, либо хмл, для работы с которым тоже есть куча инструментов. В данном случае твой вопрос просто разбивается на два: как обработать ртф-документ (с этим разобрались), и как теперь построить дерево.
Второй вопрос уже проще, но мне, чтобы показать тебе пример, надо посмотреть пример исходного ртф-файла, который ты хочешь отобразить и как бы ты хотел, чтобы он отображался в виде дерева. Я код набросаю, а ты уже сможешь допилить его как тебе надо.
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
02.05.2015, 13:33  [ТС]
test.zip
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.05.2015, 13:38
Андрей_74, А сам документ где?
Цитата Сообщение от diadiavova Посмотреть сообщение
надо посмотреть пример исходного ртф-файла
Это подразумевает, что во воложении должен быть файл rtf, который надо отобразить.
Цитата Сообщение от diadiavova Посмотреть сообщение
как бы ты хотел, чтобы он отображался в виде дерева
А это - что надо показать, что и как из документа должно отображаться в дереве.
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
02.05.2015, 13:40  [ТС]
WinRAR archive.rar
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
02.05.2015, 13:42  [ТС]
Любой .rtv файл где есть Составленное меню (гиперссылок), взгляни документ первую страницу там увидешь
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.05.2015, 14:57
Цитата Сообщение от Андрей_74 Посмотреть сообщение
Любой .rtv файл где есть Составленное меню (гиперссылок)
Любой не получится. Они могут иметь разную структуру и должны обрабатываться в зависимости от структуры. То, что ты прислал - это одноуровненвый список и чтобы из него сделать что-то путное, сначала надо сделать его многоуровневым. А это, знаешь ли проблема. К тому же у тебя тут вообще непонятно по каким признакам определять, где начинается содержание, а где кончается.
В ртф есть дескрипторы спсков. То есть там многоуровневые списки можно составить средствами самого формата. Пример, где этот список составлен как надо прилагаю в аттаче. Если взглянуть на код ртф, то там можно увидеть дескрипторы \list, \listlevel, \listtable и т. д. Вот если документ составлен так, то в хмл это будет предствлено реальным многоуровневым списком(файл прилагается). Такой список легко можно обойти рекурсивно и построить по нему дерево. Если же документ только внешне напоминает список, а все реализовано с помощью ввода символов маркеров и индентов, то обработка будет достаточно сложной и написать что-то универсальное для всех таких случаев - нереально. Можно, конечно, подстроиться под списки, как их делают конкретные программы, но в принципе это все равно будут костыли, заставить которые работать гарантированно правильно будет чрезвычайно сложно.
Вложения
Тип файла: rar Список.rar (1.3 Кб, 6 просмотров)
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
02.05.2015, 15:29  [ТС]
блин, проблема.
хотя бы что то подобие сделать
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.05.2015, 16:11
Цитата Сообщение от Андрей_74 Посмотреть сообщение
хотя бы что то подобие сделать
Ну, если ты говоришь, что там гиперссылки, ну можно просто ссылки собрать и линейный список создать. Для того, чтобы дерево построить, надо чтобы изначально дерево было.
0
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
02.05.2015, 16:51  [ТС]
только это должно быть автоматизировано, с любым документом
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.05.2015, 17:59
Цитата Сообщение от Андрей_74 Посмотреть сообщение
только это должно быть автоматизировано, с любым документом
Ну если там будут настоящие гиперссылки, то можно и с любым. Только тогда будут все ссылки выведены, а не только содержание. Содержание - штука довольно условная.
Ссылки можно извлечь следующим образом.
C#
1
2
using System.Xml.Linq;
using System.Xml.XPath;
Преобразовываем ртф в хмл как было показано выше. далее имея хмл текст делаем с ним следующее
C#
1
               var xml = XDocument.Parse(XamlWriter.Save(doc));
Получили XDocument
C#
1
                var links = xml.XPathSelectElements("//*[local-name() = 'Hyperlink']");
Извлекли из него ссылки. Ну, а дальше делай, что тебе надо.
C#
1
2
3
4
5
                foreach (var link in links)
                {
                    var linkText = link.Value; // Текст ссылки
                    var linkUri = link.Attribute(XName.Get("NavigateUri")).Value; // Адрес ссылки
                }
1
 Аватар для Андрей_74
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 224
16.05.2015, 00:26  [ТС]
diadiavova, можно же адрес ссылки занести в treeview? если можно то как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2015, 00:26
Помогаю со студенческими работами здесь

Заполнение таблицы Access при парсинге текстового документа
Доброго времени суток! Необходима помощь, есть текстовый документ с данными о плательщиках и об оплате, при парсинге я могу забить...

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

Построить каталог в компоненте treeview
Kaк правильно построить каталог в компоненте treeview. Уровень вложенности не ограничен. Данные берутся из базы mysql. Далее после...

Сохранение изменений в компоненте treeview
Здравствуйте. Есть компонент treeview, в который я добавляю новый узел при открытии файла. Как сохранить изменения в компоненте?

Как при создании нового текстового документа увеличивать счетчик в названии?
Помагите пожалуста Как при создании новава текс.дока увеличевал на один больше Пример Он создает каждом разом один и тодже...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru