Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 15.03.2018
Сообщений: 1
1

Чтение TXT (DXF) и вывод в TXT

20.03.2018, 22:28. Показов 1235. Ответов 2
Метки нет (Все метки)

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

По роду деятельности - инженер, пытаюсь написать программу по конвертации DXF в нужный формат расчетной программы.
Не буду приводить конкретную подробную "рабочую" терминологию, ограничусь простым примером.
Так выглядит DXF:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
...              'много текста до
ENTITIES         'нужный блок с данными
0
LWPOLYLINE
5
25E
330
1F
100
AcDbEntity
8
Стена_200_3000   'Стена толщиной 200 мм и высотой 3000 мм
100
AcDbPolyline
90
3                'количество вершин
70
1
43
0.0
10
0.0             ' координата x1 [мм]
20
0.0             ' координата y1 [мм]
10
12000.0         ' координата x2 [мм]
20
0.0             ' координата y2 [мм]
10
12000.0         ' координата x3 [мм]
20
6000.0          ' координата y3 [мм]
0
ENDSEC
...             'много текста после
Этот блок необходимо преобразовать в такой вид:
VB.NET
1
2
3
4
5
6
7
W-1 ={
Typ =Polygon
X =0 12 12      'x1 x2 x3
Y =0 0 6        'y1 y2 y3
d=0.2           'толщина
h=3.0           'высота
}
Коротко алгоритм выглядит так:
1. Поиск ENTITIES - нужного блока с данными
2. Поиск "Стена_200_3000" - здесь поиск именно должен быть по первой части - стена или плита, 200 и 3000 - переменные параметры, они могут быть любыми.
3. Чтение количества вершин и их координат (наверно, в массив)
4. Вывод в TXT
5. Повторение для всех элементов (может быть 100 стен, 100 плит, 100 нагрузок и т.д.)
6. Окончание чтения по достижении ENDSEC

Есть определенные (школьные ) навыки на vb.net, сейчас проблема с пунктами 1-3. Спасибо всем неравнодушным.
P.S. Отвечать смогу только вечерами.
С уважением.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2018, 22:28
Ответы с готовыми решениями:

Чтение из файла 'New.txt', запись четных строк в '1.txt', а нечетных в '2.txt'
В общем все работает, но есть "НО", иначе бы не открывал тему. Содержимое исходного файла: 1 1 1...

Сделать ввод текстовым файлом Input.txt, а вывод output.txt
var a : longint; s : string; i, n : integer; begin readln(a); str(a, s);...

В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt
Программным путем: 1. В папке С:\temp создайте папки К1 и К2. 2. В папке К1: a) создайте файл...

Создать новый файл qa.txt, который будет содержать строки с вопросами и ответами из файлов q.txt и a.txt.
В текстовом редакторе создать два текстовых файла q.txt и a.txt, которые соответственно содержат...

2
Модератор
Эксперт .NET
3357 / 3019 / 462
Регистрация: 27.01.2014
Сообщений: 5,608
21.03.2018, 04:38 2
я бы наверное создал класс или структуру СТЕНА или еще как, и в момент чтения файла заполнять массив таких структур или классов... Далее имея массив - экспортируйте его куда угодно и как угодно.
Прочесть ваш файл не сложно, желательно чтоб вы скинули сюда парочку таких файлов без вашего редактирования, такие как они есть...
0
3928 / 3137 / 752
Регистрация: 02.02.2013
Сообщений: 3,002
Записей в блоге: 2
22.03.2018, 00:54 3
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Попробуйте так. Думаю, что сформировать вывод сможете и сами.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dxf() As String = IO.File.ReadAllLines("tst.dxf", System.Text.Encoding.Default)
        Dim section As New List(Of String)
        Dim info As New List(Of pLineInfo)
        Dim bb As Boolean
        'выделяем раздел графических примитивов чертежа (ENTITIES)
        For Each s As String In dxf
            If s = "ENTITIES" Then bb = True
            If bb Then section.Add(s)
            If s = "ENDSEC" Then bb = False
        Next
        Dim inf As pLineInfo
        Dim nn As Integer
        bb = False
        For i = 0 To section.Count - 1
            If section(i).StartsWith("Стена") OrElse section(i).StartsWith("Плита") Then
                Dim ss() As String = section(i).Split("_")
                inf = New pLineInfo(CDbl(ss(1)) / 1000, CDbl(ss(2)) / 1000)
                i += 1
                nn = -1
                bb = True
            End If
            If bb Then
                If section(i) = "90" Then 'код числа вершин
                    i += 1
                    nn = section(i)
                End If
                If section(i) = "10" Then 'код X
                    i += 1
                    inf.xx.Add(CInt(section(i)) / 1000)
                End If
                If section(i) = "20" Then 'код Y
                    i += 1
                    inf.yy.Add(CInt(section(i)) / 1000)
                    nn -= 1
                End If
                If nn = 0 Then
                    info.Add(inf)
                    bb = False
                End If
            End If
        Next
        'вывод info
        '...
    End Sub
End Class
Public Class pLineInfo
    Public Property dd As Double
    Public Property hh As Double
    Public xx As List(Of Integer)
    Public yy As List(Of Integer)
    Public Sub New()
        MyBase.New()
        xx = New List(Of Integer)
        yy = New List(Of Integer)
    End Sub
    Public Sub New(ByVal d As Double, ByVal h As Double)
        Me.New()
        _dd = d
        _hh = h
    End Sub
    Public Overrides Function toString() As String
        'вывод информации по объекту в требуемом виде
        '...
    End Function
End Class

PS. Для тестирования, к сожалению, нет данных.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2018, 00:54

Чтение данных с одного txt файла, запись данных во второй txt в определенную позицию
Добрый день, уважаемые форумчане! Нужна ваша помощь. Задача поставлена так: существует файл...

Разбить входной файл xanadu.txt на 2 выходных 1.txt и 2.txt. В 1- нечетные, 2- четные
Разбить входной файл xanadu.txt на 2 выходных 1.txt и 2.txt. В 1- нечетные, 2- четные. Записать...

Записать в text3.txt строки, которые есть и в text1.txt, и в text2.txt
Здравствуйте, нужно записать в text3.txt строки, которые есть и в text1.txt, и в text2.txt...

Разбить входной файл, например: xatadu.txt на 2 выходные файлы:1.txt и 2.txt , записав в 1 нечетные байты, а в 2 четные
Разбить входной файл, например: xatadu.txt на 2 выходные файлы:1.txt и 2.txt , записав в 1 нечетные...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.