Прочитать и обработать текстовый файл.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

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

Прочитать и обработать текстовый файл.

Сообщение oskolok_vatbI » 22.08.2012 (Ср) 20:25

Здравствуйте уважаемые.
Прошу подсказать решение следующей задачи, с которой я столкнулся в своей работе. Нужно проанализировать несколько текстовых файлов определенного формата (пример в прикрепленных файлах). Файл содержит несколько блоков с дополнительной, неважной мне информацией, блок с названиями кривых и блок со значениями этих кривых, в виде столбцов данных, в том же порядке, в котором идет перечисление в блоке с названиями. Название кривой для анализа заранее известно, следовательно известен столбец с ее данными, вид кривой представлен на рисунке ниже. На этой кривой нужно выделить интервал изменения ее значений (глубину кровли и глубину подошвы) и вычислить насколько изменились ее значения в этом интервале. Глубина - это всегда первый столбец.

Пока я научился только выделять блок с описанием кривых, и находить индекс нужной мне.
Код: Выделить всё
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Path As String = "C:/test.las"
        Dim CurveName As String = "QZIO"
        Dim CurveIndex, i As Integer
        Dim CurveInformationBlock As String
        Dim CurveNames() As String
        Dim AllValues As String
        Dim StringValues() As String

        Dim AllText As String = My.Computer.FileSystem.ReadAllText(Path)
        CurveInformationBlock = AllText.Substring(AllText.IndexOf("~CURVE INFORMATION") + 20, AllText.IndexOf("#END CURVE INFORMATION") - AllText.IndexOf("~CURVE INFORMATION") - 22)
        CurveNames = CurveInformationBlock.Split(vbCrLf)

        For Each elem In CurveNames
            If elem.StartsWith(CurveName) Then CurveIndex = i
            i += 1
        Next


Изображение

Подскажите пожалуйста, как зная индекс нужной мне кривой считать соответствующий ей столбец значений и определить на каких глубинах происходят изменения, а так же на сколько в каждом интервале изменяются значения кривой.
Я думаю, что с вашей помощью, мне, человеку далекому от программирования, по силам решить эту задачу, однако если кто-то не сильно занят и готов помочь готовым, прокомментированным кодом за небольшое количество ден. знаков - также буду рад.
Большое спасибо.
Вложения
test.zip
(222.76 Кб) Скачиваний: 138

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Прочитать и обработать текстовый файл.

Сообщение FireFenix » 22.08.2012 (Ср) 21:50

Ни черта не понятно. Причём здесь кривая и текстовый файл?
Нормально распишите задачу чтобы все поняли. Т.е. что имеется, могут ли значения храниться в другом формате, что нужно взять, как нужно взять, куда нужно взять, преобразовать, и как вывести?

Более того в файле имеются столбцы DEPT TF QZW QZO QZIW QZIO, который тебе нужен? И как сопоставить значения твоей кривой?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

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

Re: Прочитать и обработать текстовый файл.

Сообщение oskolok_vatbI » 23.08.2012 (Чт) 6:48

Попытаюсь разъяснить. Данные представляющие собой результаты исследований в скважинах, хранятся в текстовом файле и представляют собой изменения значений некоторых параметром от глубины. Т.к. с этими параметрами мы работаем в виде графиков, прижилось их название - кривые.
Столбец DEPT - это значения глубины. Остальные столбцы - значения параметров (то что я называю кривыми) на этой глубине:
Код: Выделить всё
#       DEPT         TF        QZW        QZO       QZIW       QZIO
~ASCII LOG DATA
    393.0000  -999.2500   201.2899   672.9884     0.0000     0.0000
    393.5000  -999.2500   201.2899   672.9884     0.0000     0.0000
    394.0000  -999.2500   201.2899   672.9884     0.0000     0.0000
    394.5000  -999.2500   201.2899   672.9884     0.0000     0.0000
    395.0000  -999.2500   201.2899   672.9884     0.0000     0.0000
    395.5000  -999.2500   201.2899   672.9884     0.0000     0.0000
    396.0000  -999.2500   201.2899   672.9884     0.0000     0.0000
    396.5000  -999.2500   201.2899   672.9884     0.0000     0.0000

Порядок столбцов соответствует порядку кривых в блоке описания кривых:
Код: Выделить всё
~CURVE INFORMATION
DEPT          .FT                                   : MEASURED DEPTH
TF              .°F                                   :
QZW           .BPD                                  :
QZO            .BPD                                  :
QZIW          .BPD/FT                               :
QZIO           .BPD/FT                               :
#END CURVE INFORMATION

Мне заранее известно название нужной кривой, в данном случае QZIO она шестая в блоке описания, значит ей соответствует шестой столбец данных. Она не обязательно бывает шестой, может быть на любом месте кроме первого (первым всегда идет глубина DEPT), но тогда и в блоке описания кривых она будет занимать соответствующую позицию.
Если построить ее график от глубины, получится картина, представленная на рисунке в предыдущем моем посте.
Т.е. имея имя кривой, нужно определить в каком столбце находятся ее значения (это я вроде сделал), определить на каких глубинах происходят изменения этих значений (на рисунке это "глубина кровли интервала" и "глубина подошвы интервала") и рассчитать на сколько изменились значения в этом интервале.
Так же, забыл добавить, что величина -999.2500 не является значением, а наоборот является кодом отсутствия значений.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Прочитать и обработать текстовый файл.

Сообщение FireFenix » 23.08.2012 (Чт) 18:21

Ни черта опять не понятно...

Если включить телепатию, то можно предположить, что тебе нужно определить интервалы между точек перелома для каждого из параметров твоей таблицы?

Если да, то вот я набросал примерный код, где
Код: Выделить всё
Start - начало интервала
End - Конец

Start: 8450,0000 (253,964) - точка, где её глубина DEPT = 8450,0000 и выбранный параметр = 253,964
End: 8797,5000 (254,5119) - точка, где её глубина DEPT = 8797,5000 и выбранный параметр = 253,5119
Вложения
DepthCurve.rar
(191.62 Кб) Скачиваний: 135
789.PNG
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Прочитать и обработать текстовый файл.

Сообщение FireFenix » 24.08.2012 (Пт) 14:42

Нашёл баг или фитчу viewtopic.php?f=9&t=44073&p=6764790#p6764790
Переделал, теперь всё должно работать
Снимок666.PNG
Вложения
DepthCurve.rar
(192.88 Кб) Скачиваний: 151
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в Visual Basic .NET

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

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

    TopList