Чтение данных из файла в массив, сортировка и другие изощрения - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д