Как провести чтение, сортировку и сохранение данных из тестового файла - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как провести чтение, сортировку и сохранение данных из тестового файла

Как провести чтение, сортировку и сохранение данных из тестового файла

Ответ
Поиск в этой теме
Непрочитано 12.09.2013, 23:24
Как провести чтение, сортировку и сохранение данных из тестового файла
h6784rfg6
 
Регистрация: 12.09.2013
Сообщений: 24

Подскажите, пожалуйста, как решить следующую задачу:

Есть файл, содержащий текстовые данные. Все данные разделены по типам (например, текст, дуга, многоугольник). Название типа сопровождено определенным знаком – например <. После названия типа следует повторяющееся кол-во параметров. Далее идет пробел и новый элемент/блок. Все данные перемешаны (Блоки одинаковых типов данных не идут один за другим).
Имеется следующая задача :

Надо вчитать файл в память и проанализировать. Надо пройти все строки файла таким образом:

- При обнаружении названия типа данных (например - <текст) надо создать новый элемент массива структур текст и дальнейшими строчками заполнить параметры этого элемента. Такими параметрами могут быть: положение, номер, ширина, и т.д. При этом каждый параметр находится на новой строчке – порядок параметров не меняется.

Подскажите, как провести такой анализ средствами языка VB.NET. Я новичок, но создать массив структур определенного типа и приписать им значения смог бы (с грехом пополам), но вот провести такой анализ не умею, хоть убей.
Как дополнение скажу, что созданные и заполненные таким образом массивы структур будут применяться для создания определенного чертежа в AutoCAD. Я проштудировал создание элементов AutoCAD, так что смогу, надеюсь, потом использовать сохраненные данные при вызове нужных функций библиотеки ObjectARX.
Просмотров: 9370
 
Непрочитано 13.09.2013, 17:40
#21
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от zamtmn Посмотреть сообщение
но это незначит что внутри программы этиже данные обязательно оправдано хранить в нем.
Так внутри программы данные храняться никак не в виде xml - они преобразуються в соответствующие объекты\структуры для эффективной работы.
Offtop: опс. опоздал
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 13.09.2013 в 17:45.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 17:55
#22
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Вся суть этого бесполезного форума - только успешно трепаться языком,
хотя я дал быстрый пример как можно было начать программу,
вместо этого наши загуренные болтуны обсуждают мой чахлый
набросок, молодца, мои поздравления, сходите еще на ciberforum.ru
и объясните там тоже как надо правильно писать, может вам всем слабо
заодно поучить народ на stackoverflow.com?
Олег (jr.) вне форума  
 
Непрочитано 13.09.2013, 17:55
#23
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>А внутри программы данные и не нужно хранить в формате XML. Внутри программы они десериализуются в объектный код и работа ведётся с объектами, а не с "текстом в формате XML".
Что есть объектный код? объекты и типы данных автора программы или объекты XML?
zamtmn вне форума  
 
Непрочитано 13.09.2013, 18:03
#24
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Offtop: Олег (jr.)
НУ здесь то можно понты по колотить....
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 13.09.2013, 18:07
#25
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
хотя я дал быстрый пример как можно было начать программу,
Для меня так и осталось загадкой в чем сложность автора - это к вопросу о том для кого этот код - вначале я пытаюсь понять что нужно - а потом уже от степени трудоемкости, рисую код (пример кода) или нет. Быстро написать абы что последует еще 500 вопросов\просьб "а можно-ли" - и Вам это известно не меньше меня. Ну а возникший диалог между мной и hwd хоть и являеться побочным в некоторой степени, но уверен для кого-то и полезный - просто у нас с ним подходы немного разные (у каждого в силу своей испорченности) - но оба вполне жизнеспособные.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 18:12
#26
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Вся суть этого бесполезного форума - только успешно трепаться языком,
хотя я дал быстрый пример как можно было начать программу,
вместо этого наши загуренные болтуны обсуждают мой чахлый
набросок, молодца, мои поздравления, сходите еще на ciberforum.ru
и объясните там тоже как надо правильно писать, может вам всем слабо
заодно поучить народ на stackoverflow.com?
Олег, имхо уж лучше не давать ничего, чем давать "чахлые наброски"(с). Какой смысл сюда за уши притягивать ciberforum.ru и stackoverflow.com? Не нужно софистикой заниматься. Ты думаешь, что если ты на обозначенных форумах выложишь код с такими ошибками, то тебе никто на них не укажет (при условии, что будут читать его)? Я сильно сомневаюсь в этом... Или и там указавший сразу станет "загуренным болтуном"? Вопрос риторический.

Ты выложил код. Я дал по нему аргументированные замечания. Если я не прав - так же аргументированно об этом и пиши. А фразы, типа "загуренные болтуны" и твои "поздравления" - это, в данном случае, ни о чём и более соответствуют уровню школоты (уж извини)... Если я вижу интересный и качественный код - стараюсь брать его на вооружение. Если вижу косяки - сообщаю о них. Кто и как для себя трактует мои замечания - мне фиолетово.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.09.2013, 19:05
#27
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Цитата:
Сообщение от hwd Посмотреть сообщение
Я не понял этой фразы. Что подразумевается под "структурами данных произвольного формата"?

100%

Это вряд ли, т.к. и на XML можно написать компактный по объёму контент.

в данном случае речь о данных, представленных в ТЕКСТОВОМ формате.
Здесь вопрос не столько в "универсальности формата", сколько в "универсальности обработки". Обрабатывать структурированные текстовые данные гораздо удобней тем же LINQ to XML, чем построчно читать текст из потока (stream) и затем выполнять парсинг полученного контента, а потом ещё и заниматься внесением изменений в эти данные, вставляя строки между уже имеющимися, изменяя существующие записи, удаляя лишние и т.п.

В данном случае, заочное приведение данных (в памяти) подобно приведению дробей к единому знаменателю, чтобы получить возможность выполнения сложения. Только в нашем случае мы получаем не возможность сложения, а гибкую возможность модификации\аналитики данных без необходимости написания кучи дополнительного кода, за счёт того, что воспользуемся уже имеющимися технологиями.

P.S. Если всё ещё не понятно о чём я говорю, то можно сделать простое сравнение: ты напиши свой вариант кода, позволяющего модифицировать данные, выше выложенные автором, а я свой. Затем совместно и оценим объём кода и удобство обработки данных с промежуточной конвертацией в XML и без неё, на конкретных примерах кода. Т.к. автор уже слился с темы (посматривает, но ничего не пишет), то кодом лучше будет обменяться через скайп и там же обсудить результаты, т.к. помогать в решении, видя исходники автора и конкретные проблемные моменты в его коде - это одно, а собственно решать за кого-то - это другое (второй вариант мне претит, да и без меня найдутся те, кто с низкого старта рванутся за него всё делать).
Кто слился?) Я тут, просто тут понеслось обсуждение того, чего я не понимаю, вот и не пишу
h6784rfg6 вне форума  
 
Непрочитано 13.09.2013, 19:20
#28
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


h6784rfg6, я вам дал два! алгоритма решения вашей задачи: программистский и управленческий, реализуйте хотя бы один и будет вам счастье.
gomer вне форума  
 
Непрочитано 13.09.2013, 19:49
#29
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


[quote=hwd;1150322] QUOTE]
Ignored
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.09.2013, 18:58
#30
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Ладно, программу я написал. Все анализирует, все сохраняет. Но вот проблема:

Когда пытаюсь нарисовать этими данными текст, ну или кривую, у меня ничего в автокаде не отображается.
Я добавлю файл, который он анализирует и сам код программы. Подскажите, какой выбрать масштаб в автокаде, чтобы увидеть добавленные примитивы. Если дело в масштабе. Если дело в коде, помогите найти загвоздку.

Код:
[Выделить все]
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry

Public Class Class1

    Private Structure oTEXT
        Dim REF As String
        Dim XREFS As String
        Dim X_SKAL As Double
        Dim HOHE As Decimal
        Dim DREHUNG As Decimal
        Dim STIL As String
        Dim PKT_X As List(Of Decimal)
        Dim PKT_Y As List(Of Decimal)
        Dim TYP As String
        Dim FARBE As String
        Dim TEXTFARBE As Integer
        Dim TEXT As String
    End Structure

    Private Structure oPOLYLINIE
        Dim REF As String
        Dim XREFS As String
        Dim FARBE As String
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oRAHMEN
        Dim REF As String
        Dim XREFS As String
        Dim LTYP As String
        Dim BREITE As Decimal
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
        Dim FARBE As Integer
    End Structure

    Private Structure oKMMARKE
        Dim REF As String
        Dim XREFS As String
        Dim STR As Integer
        Dim KM As Decimal
        Dim TYP As String
        Dim DA As Decimal
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oKMTXT
        Dim REF As String
        Dim XREFS As String
        Dim STR As Integer
        Dim HOHE As Decimal
        Dim DREHUNG As Decimal
        Dim X_SKAL As Double
        Dim STIL As String
        Dim TYP As String
        Dim FARBE As String
        Dim TEXTFARBE As Integer
        Dim TEXT As String
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oLEGENDE_BEGINN
        Dim BASIS_X As List(Of String)
        Dim BASIS_Y As List(Of String)
        Dim MAXY As Integer
    End Structure

    Private Structure oBahnhof
        Dim REF As String
        Dim XREFS As List(Of String)
        Dim NAME As String
        Dim ID As Integer
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oRIPFEIL
        Dim REF As String
        Dim XREFS As String
        Dim TEXT As String
        Dim HOHE As Decimal
        Dim DREHUNG As Decimal
        Dim X_SKAL As Double
        Dim STIL As String
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oABZWEIG
        Dim REF As String
        Dim XREFS As String
        Dim NAME As String
        Dim ID As Integer
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oGRENZE
        Dim REF As String
        Dim XREFS As String
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim FARBE As Integer
        Dim TYP As String
        Dim BREITE As Decimal
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
        Dim DA As List(Of String)
    End Structure

    Private Structure oSOLID
        Dim REF As String
        Dim XREFS As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oSTRECKENENDE
        Dim REF As String
        Dim XREFS As String
        Dim TEXT As String
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oSGL
        Dim REF As String
        Dim XREFS As String
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim EVB As Decimal
        Dim RIKZ As String
        Dim Number As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Text_Collection As New List(Of oTEXT)
    Private Polylinie_Collection As New List(Of oPOLYLINIE)
    Private Rahmen_Collection As New List(Of oRAHMEN)
    Private KmMarke_Collection As New List(Of oKMMARKE)
    Private KmTxt_Collection As New List(Of oKMTXT)
    Private LegendeBeginn_Collection As New List(Of oLEGENDE_BEGINN)
    Private Bahnhof_Collection As New List(Of oBahnhof)
    Private Ripfeil_Collection As New List(Of oRIPFEIL)
    Private Abzweig_Collection As New List(Of oABZWEIG)
    Private Grenze_Collection As New List(Of oGRENZE)
    Private Solid_Collection As New List(Of oSOLID)
    Private Streckenende_Collection As New List(Of oSTRECKENENDE)
    Private SGL_Collection As New List(Of oSGL)

    Private Sub Analise()
        Dim Del() As String = {vbCrLf & vbCrLf}
        Dim Blocks() As String = IO.File.ReadAllText("C:\Users\MykytaKolpachov\Desktop\S-Bahn Bln.RVX").Split(Del, StringSplitOptions.None)
        Dim splBlock() As String
        Dim Param_Val() As String
        Dim SGL_Split() As String
        Dim splPkt() As String
        Dim splXREFS() As String
        For Each Block As String In Blocks
            splBlock = Split(Block, vbCrLf)
            If splBlock(0).Contains("=") Then
                Dim strucSGL As New oSGL
                strucSGL.PKT_X = New List(Of String)
                strucSGL.PKT_Y = New List(Of String)
                SGL_Split = Split(splBlock(0), "=")
                strucSGL.Number = CInt(SGL_Split(1))
                For i = 1 To splBlock.Length - 1
                    Param_Val = Split(splBlock(i), "=")
                    Select Case Param_Val(0)
                        Case "REF"
                            strucSGL.REF = Param_Val(1).ToString
                        Case "XREFS"
                            strucSGL.XREFS = (Param_Val(1).ToString)
                        Case "BREITE"
                            strucSGL.BREITE = CDec(Param_Val(1))
                        Case "RIKZ"
                            strucSGL.RIKZ = Param_Val(1)
                        Case "EVB"
                            strucSGL.EVB = CDec(Param_Val(1))
                        Case "LTYP"
                            strucSGL.LTYP = Param_Val(1).ToString
                        Case "FARBE"
                            strucSGL.FARBE = CInt(Param_Val(1))
                        Case "PKT"
                            splPkt = Split(Param_Val(1), "/")
                            strucSGL.PKT_X.Add(splPkt(0).ToString)
                            strucSGL.PKT_Y.Add(splPkt(1).ToString)
                        Case "LAYOUT:"
                    End Select
                Next
                SGL_Collection.Add(strucSGL)
                'here add the structure to the collection
            End If
            Select Case splBlock(0)
                Case ">TEXT"
                    Dim strucText As New oTEXT
                    strucText.PKT_X = New List(Of Decimal)
                    strucText.PKT_Y = New List(Of Decimal)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucText.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucText.XREFS = Param_Val(1).ToString
                            Case "X-SKAL"
                                strucText.X_SKAL = CDbl(Param_Val(1))
                            Case "HOHE"
                                strucText.HOHE = CDec(Param_Val(1))
                            Case "DREHUNG"
                                strucText.DREHUNG = CDec(Param_Val(1))
                            Case "STIL"
                                strucText.STIL = Param_Val(1).ToString
                            Case "TYP"
                                strucText.TYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucText.FARBE = Param_Val(1).ToString
                            Case "TEXTFARBE"
                                strucText.TEXTFARBE = CInt(Param_Val(1))
                            Case "TEXT"
                                strucText.TEXT = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucText.PKT_X.Add(CDec(splPkt(0)))
                                strucText.PKT_Y.Add(CDec(splPkt(1)))
                        End Select
                    Next
                    Text_Collection.Add(strucText)
                    'here add the structure to the collection
                Case ">POLYLINIE"
                    Dim strucPolylinie As New oPOLYLINIE
                    strucPolylinie.PKT_X = New List(Of String)
                    strucPolylinie.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucPolylinie.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucPolylinie.XREFS = Param_Val(1).ToString
                            Case "BREITE"
                                strucPolylinie.BREITE = CDec(Param_Val(1))
                            Case "HOHE"
                                strucPolylinie.LTYP = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucPolylinie.PKT_X.Add(splPkt(0).ToString)
                                strucPolylinie.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    Polylinie_Collection.Add(strucPolylinie)
                    'here add the structure to the collection
                Case ">RAHMEN"
                    Dim strucRAHMEN As New oRAHMEN
                    strucRAHMEN.PKT_X = New List(Of String)
                    strucRAHMEN.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucRAHMEN.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucRAHMEN.XREFS = Param_Val(1).ToString
                            Case "BREITE"
                                strucRAHMEN.BREITE = CDec(Param_Val(1))
                            Case "HOHE"
                                strucRAHMEN.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucRAHMEN.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucRAHMEN.PKT_X.Add(splPkt(0).ToString)
                                strucRAHMEN.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    Rahmen_Collection.Add(strucRAHMEN)
                    'here add the structure to the collection
                Case "KMMARKE"
                    Dim strucKMMARKE As New oKMMARKE
                    strucKMMARKE.PKT_X = New List(Of String)
                    strucKMMARKE.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucKMMARKE.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucKMMARKE.XREFS = Param_Val(1).ToString
                            Case "STR"
                                strucKMMARKE.STR = CInt(Param_Val(1))
                            Case "KM"
                                strucKMMARKE.KM = CDec(Param_Val(1))
                            Case "DA"
                                strucKMMARKE.DA = CDec(Param_Val(1))
                            Case "TYP"
                                strucKMMARKE.TYP = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucKMMARKE.PKT_X.Add(splPkt(0).ToString)
                                strucKMMARKE.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    KmMarke_Collection.Add(strucKMMARKE)
                    'here add the structure to the collection
                Case "KMTXT"
                    Dim strucKMTXT As New oKMTXT
                    strucKMTXT.PKT_X = New List(Of String)
                    strucKMTXT.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucKMTXT.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucKMTXT.XREFS = Param_Val(1).ToString
                            Case "X-SKAL"
                                strucKMTXT.X_SKAL = CDbl(Param_Val(1))
                            Case "HOHE"
                                strucKMTXT.HOHE = CDec(Param_Val(1))
                            Case "DREHUNG"
                                strucKMTXT.DREHUNG = CDec(Param_Val(1))
                            Case "STR"
                                strucKMTXT.STR = CInt(Param_Val(1))
                            Case "STIL"
                                strucKMTXT.STIL = Param_Val(1).ToString
                            Case "TYP"
                                strucKMTXT.TYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucKMTXT.FARBE = Param_Val(1).ToString
                            Case "TEXTFARBE"
                                strucKMTXT.TEXTFARBE = CInt(Param_Val(1))
                            Case "TEXT"
                                strucKMTXT.TEXT = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucKMTXT.PKT_X.Add(splPkt(0).ToString)
                                strucKMTXT.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    KmTxt_Collection.Add(strucKMTXT)
                    'here add the structure to the collection
                Case ">LEGENDE_BEGINN"
                    Dim strucLEGENDE_BEGINN As New oLEGENDE_BEGINN
                    strucLEGENDE_BEGINN.BASIS_X = New List(Of String)
                    strucLEGENDE_BEGINN.BASIS_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "MAXY"
                                strucLEGENDE_BEGINN.MAXY = CInt(Param_Val(1))
                            Case "BASIS"
                                splPkt = Split(Param_Val(1), "/")
                                strucLEGENDE_BEGINN.BASIS_X.Add(splPkt(0).ToString)
                                strucLEGENDE_BEGINN.BASIS_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    LegendeBeginn_Collection.Add(strucLEGENDE_BEGINN)
                    'here add the structure to the collection
                Case ">BAHNHOF"
                    Dim strucBAHNHOF As New oBahnhof
                    strucBAHNHOF.PKT_X = New List(Of String)
                    strucBAHNHOF.PKT_Y = New List(Of String)
                    strucBAHNHOF.XREFS = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucBAHNHOF.REF = Param_Val(1).ToString
                            Case "XREFS"
                                splXREFS = Split(Param_Val(1), "/")
                                For q = 0 To splXREFS.Length - 1
                                    strucBAHNHOF.XREFS.Add(splXREFS(q).ToString)
                                Next
                            Case "ID"
                                strucBAHNHOF.ID = CInt(Param_Val(1))
                            Case "STRECKE"
                                strucBAHNHOF.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucBAHNHOF.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucBAHNHOF.BREITE = CDec(Param_Val(1))
                            Case "LAYOUT:"
                            Case "LTYP"
                                strucBAHNHOF.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucBAHNHOF.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucBAHNHOF.PKT_X.Add(splPkt(0).ToString)
                                strucBAHNHOF.PKT_Y.Add(splPkt(1).ToString)
                            Case Else
                                strucBAHNHOF.NAME = Param_Val(0)
                        End Select
                    Next
                    Bahnhof_Collection.Add(strucBAHNHOF)
                    'here add the structure to the collection
                Case ">RIPFEIL"
                    Dim strucRIPFEIL As New oRIPFEIL
                    strucRIPFEIL.PKT_X = New List(Of String)
                    strucRIPFEIL.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucRIPFEIL.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucRIPFEIL.XREFS = (Param_Val(1).ToString)
                            Case "TEXT"
                                strucRIPFEIL.TEXT = (Param_Val(1).ToString)
                            Case "HOHE"
                                strucRIPFEIL.HOHE = CDec(Param_Val(1))
                            Case "DREHUNG"
                                strucRIPFEIL.DREHUNG = CDec(Param_Val(1))
                            Case "X-SKAL"
                                strucRIPFEIL.X_SKAL = CDbl(Param_Val(1))
                            Case "STIL"
                                strucRIPFEIL.STIL = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucRIPFEIL.PKT_X.Add(splPkt(0).ToString)
                                strucRIPFEIL.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                        End Select
                    Next
                    Ripfeil_Collection.Add(strucRIPFEIL)
                    'here add the structure to the collection
                Case ">ABZWEIG"
                    Dim strucABZWEIG As New oABZWEIG
                    strucABZWEIG.PKT_X = New List(Of String)
                    strucABZWEIG.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucABZWEIG.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucABZWEIG.XREFS = (Param_Val(1).ToString)
                            Case "ID"
                                strucABZWEIG.ID = CInt(Param_Val(1))
                            Case "STRECKE"
                                strucABZWEIG.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucABZWEIG.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucABZWEIG.BREITE = CDec(Param_Val(1))
                            Case "LTYP"
                                strucABZWEIG.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucABZWEIG.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucABZWEIG.PKT_X.Add(splPkt(0).ToString)
                                strucABZWEIG.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                            Case Else
                                strucABZWEIG.NAME = Param_Val(0).ToString
                        End Select
                    Next
                    Abzweig_Collection.Add(strucABZWEIG)
                    'here add the structure to the collection
                Case ">GRENZE"
                    Dim strucGRENZE As New oGRENZE
                    strucGRENZE.PKT_X = New List(Of String)
                    strucGRENZE.PKT_Y = New List(Of String)
                    strucGRENZE.DA = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucGRENZE.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucGRENZE.XREFS = (Param_Val(1).ToString)
                            Case "STRECKE"
                                strucGRENZE.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucGRENZE.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucGRENZE.BREITE = CDec(Param_Val(1))
                            Case "TYP"
                                strucGRENZE.TYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucGRENZE.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucGRENZE.PKT_X.Add(splPkt(0).ToString)
                                strucGRENZE.PKT_Y.Add(splPkt(1).ToString)
                            Case "DA"
                                strucGRENZE.DA.Add(Param_Val(1))
                            Case "LAYOUT:"
                        End Select
                    Next
                    Grenze_Collection.Add(strucGRENZE)
                    'here add the structure to the collection
                Case ">SOLID"
                    Dim strucSOLID As New oSOLID
                    strucSOLID.PKT_X = New List(Of String)
                    strucSOLID.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucSOLID.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucSOLID.XREFS = (Param_Val(1).ToString)
                            Case "FARBE"
                                strucSOLID.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucSOLID.PKT_X.Add(splPkt(0).ToString)
                                strucSOLID.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                        End Select
                    Next
                    Solid_Collection.Add(strucSOLID)
                    'here add the structure to the collection
                Case ">STRECKENENDE"
                    Dim strucSTRECKENENDE As New oSTRECKENENDE
                    strucSTRECKENENDE.PKT_X = New List(Of String)
                    strucSTRECKENENDE.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucSTRECKENENDE.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucSTRECKENENDE.XREFS = (Param_Val(1).ToString)
                            Case "STRECKE"
                                strucSTRECKENENDE.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucSTRECKENENDE.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucSTRECKENENDE.BREITE = CDec(Param_Val(1))
                            Case "LTYP"
                                strucSTRECKENENDE.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucSTRECKENENDE.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucSTRECKENENDE.PKT_X.Add(splPkt(0).ToString)
                                strucSTRECKENENDE.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                            Case Else
                                strucSTRECKENENDE.TEXT = Param_Val(0).ToString
                        End Select
                    Next
                    Streckenende_Collection.Add(strucSTRECKENENDE)
                    'here add the structure to the collection
            End Select
        Next
    End Sub

    <CommandMethod("CreateText")> _
    Public Sub CreateText()
        Analise()
        '' Get the current document and database
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database

        '' Start a transaction
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            '' Open the Block table for read
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                         OpenMode.ForRead)

            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                            OpenMode.ForWrite)

            '' Create a single-line text object
            Dim acText As DBText = New DBText()
            acText.SetDatabaseDefaults()
            acText.Position = New Point3d(Text_Collection(0).PKT_X(0), Text_Collection(0).PKT_Y(0), 0)
            acText.Height = 0.5
            acText.TextString = Text_Collection(0).TEXT

            acBlkTblRec.AppendEntity(acText)
            acTrans.AddNewlyCreatedDBObject(acText, True)

            '' Save the changes and dispose of the transaction
            acTrans.Commit()
        End Using
    End Sub
End Class
П.С. Код без "автокадовского" работает на ура. Все элементы отображает.
Вложения
Тип файла: zip S-Bahn Bln.zip (296.1 Кб, 29 просмотров)
h6784rfg6 вне форума  
 
Непрочитано 18.09.2013, 11:30
#31
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616


В коде у Вас проблема.
Вы взяли пример создания текста в автокаде и сунули его к себе в проект, совершенно не понимая что и как должно работать. Вы даже формат передаваемых данных не смотрели.
Ответы на Ваши вопросы:
1. Вы выводите только один текстовый объект из 505 имеющихся в Вашем файле.
2. Вы выводите объект по первым координатам, хотя координат может быть множество (обращаю внимание, что в Вашем файле такого не случается и вероятно делать список координат в описании структуры текста не нужно.).
3. Координаты точки задаются в формате double , а не Decimal (либо меняйте прямо в структуре, либо преобразовывайте при создании текста)
4. Масштаб текста задан в переменной X_SKAL в структуре oTEXT

Остальное смотреть лень.


Это Ваш текст правильно нанесенный


ЗЫ.
Чисто из любопытства, почему Вы используйте и заполняете структуры данных, а потом по списку этих структур создаете объекты, может убрать промежуточное звено и сразу создавать объекты?

Последний раз редактировалось Boxa, 18.09.2013 в 11:50.
Boxa вне форума  
 
Автор темы   Непрочитано 18.09.2013, 12:49
#32
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Да уж разобрался) ПОлучилось один в один

по ЗЫ: Просто так удобнее оперировать с данными. Я могу определенный кусок не умещать, а так надо будет пользоваться цикличностью
h6784rfg6 вне форума  
 
Автор темы   Непрочитано 20.09.2013, 14:16
#33
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Назрел такой вопрос:

Если я создам примитив в Автокаде, то можно ли как нибудь сохранить этот примити в код? Ну например я добавлю новую линию - мой dll должен уметь увидеть это и добавить его в список (список свойств должен выглядеть так же, как и файл из которого импортировали весь рисунок). Такое возможно?
h6784rfg6 вне форума  
 
Непрочитано 20.09.2013, 14:22
#34
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


А если примитив будет удаляться? Или меняться?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2013, 14:23
#35
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616


Цитата:
Сообщение от h6784rfg6 Посмотреть сообщение
можно ли как нибудь
Можно. Разрешаю.

ЗЫ.
Вы бы хотя бы для приличия изучили тот формат данных с которым работаете и справку, вопросов бы не возникало.
Boxa вне форума  
 
Автор темы   Непрочитано 20.09.2013, 14:24
#36
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Ты уловил суть) Так это возможно?

Тот формат с которым я работаю не стандардизирован, он высосан из ...
h6784rfg6 вне форума  
 
Непрочитано 20.09.2013, 14:42
#37
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616


Я не понимаю вопроса. Вам кто то запрещает считать параметры объекта в автокаде, заполнит соответствующую этому типу объектов структуру , а потом вывести в текстовый файл? То , откуда он высосан ничего не меняет. Разберитесь с форматом, какое поле, за что отвечает и какие данные хранит.
И прочитайте в конце, концов справку по net api.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как провести чтение, сортировку и сохранение данных из тестового файла



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
MS Word Нужен скрипт для копирования с одновременной заменой части текста Солидворкер Прочее. Программное обеспечение 27 27.11.2012 15:52
структурированный список Holon Программирование 22 11.09.2007 14:09
чтение данных из файла Александер Программирование 6 08.09.2005 10:24