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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте!

По роду деятельности - инженер, пытаюсь написать программу по конвертации 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
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
21.03.2018, 04:38 2
я бы наверное создал класс или структуру СТЕНА или еще как, и в момент чтения файла заполнять массив таких структур или классов... Далее имея массив - экспортируйте его куда угодно и как угодно.
Прочесть ваш файл не сложно, желательно чтоб вы скинули сюда парочку таких файлов без вашего редактирования, такие как они есть...
0
4407 / 3531 / 843
Регистрация: 02.02.2013
Сообщений: 3,417
Записей в блоге: 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
22.03.2018, 00:54
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
Copyright ©2000 - 2024, CyberForum.ru