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

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

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

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

Сортировка

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

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

необходимо по возрастанию времени, то есть, данный пример должен приобрести вид:
Листинг программы
  1. 22:04 12
  2. 22:35:05 6
  3. 23:01 4,65
  4. и т.д....
Я понятия не имею, как сохранить взаимосвязь между данными типа "время" и "число", далее отсортировать только по "времени"....пол дня голову ломаю =( Помогите пожалуйста разобраться, буду очень признателен и благодарен =)

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

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Type myType
  4.     myTime As Date
  5.     myValue As Single
  6. End Type
  7.  
  8. Dim TV(1 To 5)   As myType
  9.  
  10. Private Sub BubDown()
  11.     Dim i As Integer, j As Integer, tmp As myType
  12.     For i = 1 To UBound(TV) + 1
  13.        For j = 1 To UBound(TV) - 1
  14.            If TV(j).myTime >= TV(j + 1).myTime Then '
  15.               tmp = TV(j)
  16.                TV(j) = TV(j + 1)
  17.                TV(j + 1) = tmp
  18.            End If
  19.        Next j
  20.     Next i
  21. End Sub
  22.  
  23. Private Sub BubUp()
  24.     Dim i As Integer, j As Integer, tmp As myType
  25.     For i = 1 To UBound(TV) + 1
  26.        For j = 1 To UBound(TV) - 1
  27.            If TV(j).myTime <= TV(j + 1).myTime Then '
  28.               tmp = TV(j)
  29.                TV(j) = TV(j + 1)
  30.                TV(j + 1) = tmp
  31.            End If
  32.        Next j
  33.     Next i
  34. End Sub
  35.  
  36. Private Sub Command1_Click()
  37. Dim i As Integer
  38.     Print "Исходный массив"
  39.     For i = 1 To 5
  40.         Print TV(i).myTime, TV(i).myValue
  41.     Next i
  42.     Print "По возрастанию времени"
  43.     BubDown
  44.     For i = 1 To 5
  45.         Print TV(i).myTime, TV(i).myValue
  46.     Next i
  47.     Print "По убыванию времени"
  48.     BubUp
  49.     For i = 1 To 5
  50.         Print TV(i).myTime, TV(i).myValue
  51.     Next i
  52. End Sub
  53.  
  54. Private Sub Form_Load()
  55.     TV(1).myTime = "22:34:10"
  56.     TV(1).myValue = 3.88
  57.     TV(2).myTime = "22:32:10"
  58.     TV(2).myValue = 4.71
  59.     TV(3).myTime = "22:35:10"
  60.     TV(3).myValue = 5.38
  61.     TV(4).myTime = "22:31:10"
  62.     TV(4).myValue = 1.48
  63.     TV(5).myTime = "22:39:10"
  64.     TV(5).myValue = 1.11
  65. End Sub

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


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

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

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы