Как такое лучше сделать ?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Как такое лучше сделать ?

Сообщение oskolok_vatbI » 12.07.2009 (Вс) 14:22

У меня есть несколько файлов с замерами по глубине. Каждый файл состоит из шапки со служебной информацией о замере (начальная и конечная глубины, шаг по глубине, количество квантов измерения и т.д.) и, собственно, блок значений.
Мне нужно объединить несколько таких файлов в один текстовый (так называемый LAS формат) с общей колонкой глубины.
Разные кривые могут начинаться и заканчиваться на разных глубинах и недостающие значения должны быть заполнены -999,99 (шифр отсутствия значений). Файл должен получиться примерно таким:
Код: Выделить всё
глубина  кривая1  кривая2  кривая3
1000,00   2,53    -999,99   -999,99
1000,20   2,57    -999,99    11,73
1000,40   2,84       1,44    15,25
1000,60   1,44       2,22    14,25
...
1825,60   2,33       1,44    12,56
1825,80   2,55       2,33  -999,99


Каждый исходный файл я считываю по отдельности в массив, а как объединить эти несколько массивов я не могу придумать. Посоветуйте, как правильней построить программу, выполняющую нужные мне действия. Если не очень понятно изложил – может приложенная схема поможет разобраться. Спасибо.
Вложения
Schema.png
Schema.png (31.36 Кб) Просмотров: 1375

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как такое лучше сделать ?

Сообщение alibek » 12.07.2009 (Вс) 14:29

Интересует, как сделать вообще или как сделать в конкретной среде?
В SQL все глубины объединяешь через UNION, после чего джойнишь все выборки.
В общем случае делаешь то же самое — получаешь список всех глубин, после чего формируешь таблицу.
Lasciate ogni speranza, voi ch'entrate.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Как такое лучше сделать ?

Сообщение 1Steps » 12.07.2009 (Вс) 14:58

Каждый исходный файл я считываю по отдельности в массив, а как объединить эти несколько массивов я не могу придумать.
1. А почему не читать в один массив?
2. Что значит объединить? Сделать один массив?
Удалена за ненадобностью.

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: Как такое лучше сделать ?

Сообщение oskolok_vatbI » 12.07.2009 (Вс) 15:06

А как считать в один массив из трех разных файлов ? Объединить - я имею ввиду присвоить каждой глубине три значения (по одному с каждой кривой), можно наверное и в массив, потом из него в текст выведу как-нибудь. И как вообще лучше хранить представленную выше конструкцию ?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как такое лучше сделать ?

Сообщение Хакер » 12.07.2009 (Вс) 15:26

А что с шагом и кратностью начала и конца диапазона этому шагу? Ни слова не сказано об этом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: Как такое лучше сделать ?

Сообщение oskolok_vatbI » 12.07.2009 (Вс) 15:44

Шаг по глубине у всех кривых 20см. Начало и конец диапазона - с самой длинной кривой. Т.е. начальная глубина для всех - минимальная глубина с длинной кривой, конечная - ее же, максимальная, глубина.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как такое лучше сделать ?

Сообщение Хакер » 12.07.2009 (Вс) 16:20

Да причём этот это.
Я о том, у всех ли кривых начала и концы лежат на границе 20 см?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Как такое лучше сделать ?

Сообщение 1Steps » 12.07.2009 (Вс) 16:33

Примерно так, Class1 обзови как тебе угодно
Код: Выделить всё
Public Class Class1
    Private m_depth As Double '= твоё default значение
    Private m_curve1 As Double = -999.9
    Private m_curve2 As Double = -999.9
    Private m_curve3 As Double = -999.9

    Sub New()

    End Sub

    Sub New(ByVal d As Double, ByVal c1 As Double, ByVal c2 As Double, ByVal c3 As Double)
        m_depth = d
        m_curve1 = c1
        m_curve2 = c2
        m_curve3 = c3
    End Sub

    Property Depth() As Double
        Get
            Return m_depth
        End Get
        Set(ByVal value As Double)
            m_depth = value
        End Set
    End Property

    Property Curve1() As Double
        Get
            Return m_curve1
        End Get
        Set(ByVal value As Double)
            m_curve1 = value
        End Set
    End Property

    Property Curve2() As Double
        Get
            Return m_curve2
        End Get
        Set(ByVal value As Double)
            m_curve2 = value
        End Set
    End Property

    Property Curve3() As Double
        Get
            Return m_curve3
        End Get
        Set(ByVal value As Double)
            m_curve3 = value
        End Set
    End Property

    Overrides Function ToString() As String
        Return String.Format("{0}  {1}  {2}  {3}", m_depth, m_curve1, m_curve2, m_curve3)
    End Function
End Class


и

Код: Выделить всё
    Private m_list As New Generic.List(Of Class1)
    Private m_depth, m_cur1, m_cur2, m_cur3 As Double

    Private Sub btnReadFiles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadFiles.Click
        Dim c As New Class1
        'читаешь в цикле свои файлы
        'получаешь нужные поля(значения)
        'присваиваешь переменным m_depth, m_cur1, m_cur2, m_cur3
        c.Depth = m_depth
        c.Curve1 = m_cur1
        c.Curve2 = m_cur2
        c.Curve3 = m_cur3
        m_list.Add(c)
        MsgBox(c.ToString)

        'далее в программе записываешь в файл m_list
        'как тебе угодно
    End Sub
Удалена за ненадобностью.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как такое лучше сделать ?

Сообщение Хакер » 12.07.2009 (Вс) 16:35

По-моему мы не в разделе до дотнету...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Как такое лучше сделать ?

Сообщение 1Steps » 12.07.2009 (Вс) 16:37

Мы в трёпе :D
Удалена за ненадобностью.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Как такое лучше сделать ?

Сообщение VBTerminator » 13.07.2009 (Пн) 8:29

Делай двухмерный массив A(N, 0 To 2), где первый индекс - значение глубины, второй - номер кривой. Проходишь циклом по первому файлу, считываешь значения в первую "ячейку" второго индекса, затем содержимое второго файла - во вторую "ячейку" второго индекса и т. д. Должно получиться следующее (ось Y- первый индекс массива, ось X- второй индекс массива, для получения значения глубины из первого индекса умножаем этот индекс на 0,2):

Индексы|== 0=|===1====|===2===
-----------+-------+----------+-----------
5000 | 2,53 | -999,99 | -999,99
5001 | 2,57 | -999,99 | 11,73
5002 | 2,84 | 1,44 | 15,25
5003 | 1,44 | 2,22 | 14,25
...
9129 | 2,55 | 2,33 | -999,99


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList