Чтение данных из файла в массив, сортировка и другие изощрения - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Не могу сообразить, как считать и отсортировать данные из файла следующего вида:
то есть - это текстовый файл вида "время число", причем: 1) время указано именно в таком формате, но может быть как с указанием секунд, так и без (если секунды :00) 2) число идущее за временем не обязательно целое, может быть и дробным, как вы видите 3) разделителем между временем и числом могут быть: " " (пробел); " - " (пробелы и дефис) - это уже как преподователь задаст.. Таких файлов считывается >1 подряд, то есть: считываем один и добавляем в массив данные, затем второй и так далее. После считывания файлов удаляются данные, в которых время повторяется (допустим, 2 раза встретилось 23:22:07 - оставляем только одно), далее производится

Сортировка

(как добавлять последующие данные в массив и ежу понятно, волнует сортировка)

Отсортировать

необходимо по возрастанию времени, то есть, данный пример должен приобрести вид:
Я понятия не имею, как сохранить взаимосвязь между данными типа "время" и "число", далее отсортировать только по "времени"....пол дня голову ломаю =( Помогите пожалуйста разобраться, буду очень признателен и благодарен =)

Решение задачи: «Чтение данных из файла в массив, сортировка и другие изощрения»

textual
Листинг программы
Option Explicit
 
Private Type myType
    myTime As Date
    myValue As Single
End Type
 
Dim TV(1 To 5)   As myType
 
Private Sub BubDown()
    Dim i As Integer, j As Integer, tmp As myType
    For i = 1 To UBound(TV) + 1
       For j = 1 To UBound(TV) - 1
           If TV(j).myTime >= TV(j + 1).myTime Then '
               tmp = TV(j)
               TV(j) = TV(j + 1)
               TV(j + 1) = tmp
           End If
       Next j
    Next i
End Sub
 
Private Sub BubUp()
    Dim i As Integer, j As Integer, tmp As myType
    For i = 1 To UBound(TV) + 1
       For j = 1 To UBound(TV) - 1
           If TV(j).myTime <= TV(j + 1).myTime Then '
               tmp = TV(j)
               TV(j) = TV(j + 1)
               TV(j + 1) = tmp
           End If
       Next j
    Next i
End Sub
 
Private Sub Command1_Click()
Dim i As Integer
    Print "Исходный массив"
    For i = 1 To 5
        Print TV(i).myTime, TV(i).myValue
    Next i
    Print "По возрастанию времени"
    BubDown
    For i = 1 To 5
        Print TV(i).myTime, TV(i).myValue
    Next i
    Print "По убыванию времени"
    BubUp
    For i = 1 To 5
        Print TV(i).myTime, TV(i).myValue
    Next i
End Sub
 
Private Sub Form_Load()
    TV(1).myTime = "22:34:10"
    TV(1).myValue = 3.88
    TV(2).myTime = "22:32:10"
    TV(2).myValue = 4.71
    TV(3).myTime = "22:35:10"
    TV(3).myValue = 5.38
    TV(4).myTime = "22:31:10"
    TV(4).myValue = 1.48
    TV(5).myTime = "22:39:10"
    TV(5).myValue = 1.11
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5
Похожие ответы