Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка записей в текстовом файле [D2005, XP]


azl ©   (2007-03-04 12:19:00) 

Здравствуйте, уважаемые мастера. Помогите, пожалуйста, решить задачу.

Есть одномерный массива А(29), элементы которого распологаются произвольным образом в диапазоне от -12 до 45. И есть одномерный массив В, сформированный из массива А. Все элементы массива В больше чем средне арифметическое массива А. Эти массивы записаны в файлы М1.TXT и M2.TXT.

Нужно сделать следующее:
Выполнить сортировку данных в файле M1.txt по возрастанию, а в файле М2.txt по убыванию. Для сортировки использовать программу типа SUB. Сортировать не элементы массивов, а записи в файлах!

Все бы было легко, если бы можно было считать файлы в массивы, выполнить сортировку в массивах и обратно записать в файлы.

 for i := 1 to n do
   for j := n downto i+1 do
     if m1[j-1] > m1[j] then
       begin
         t := m1[j-1];
         m1[j-1] := m1[j];
         m1[j] := t;
       end;


Но надо  отсортировать именно записив файлах.

Я нашел, некоторый ответ:
" легко, если знаешь кол-во и размер каждой записи:

  заюзай какой-нибудь метод сортировки -
  при переборе значений переставляй записи в файле:
  считывай первую запись, затем вторую если некое условие, то
  переставляй их местами... делов-то.
"

Смысл понятен, только как это можно сделать на практике. Никто не мог бы привести пример работы с записями файла.

Спасибо.


azl   (2007-03-05 17:35:00) [1]

А что если воспользоваться процедурой Seek?


azl   (2007-03-04 17:26:00) [2]

Все равно ладу не дам.


default   (2007-03-04 13:58:00) [3]

azl ©   (04.03.07 13:49) [5]
можешь использовать TFileStream
многие алгоритмы сортировки являются обменными, то есть в процессе сортировки они переставляют элементы сортируемого списка местами
(ну как в сабжевом примере, в пузырьке в этом галимом:))
у тебя будут просто переставляться записи в файле
для этого как понимаешь не обязательно загружать весь сортируемый список в оперативную память
просто его обычно загружают если можно, чтобы жётский диск не "дёргать" ибо это гораздо медленее чем "дёргать" оперативную память


azl   (2007-03-04 13:49:00) [4]

Я понимаю, а пример можно?
В принципе, в одном файле (М2.TXT) все записи одинаковой длины.


default   (2007-03-04 13:44:00) [5]

azl ©   (04.03.07 13:42) [3]
вряд-ли ты сможешь написать сортировку слиянием
так что делай как говорят в [2]


azl   (2007-03-04 13:42:00) [6]

В том то и дело, что разной. Диапазон от -12 до 45. А это может быть и -10 и -8 и 35.


Leonid Troyanovsky   (2007-03-04 13:27:00) [7]


> azl ©   (04.03.07 12:19)  

> программу типа SUB. Сортировать не элементы массивов, а
> записи в файлах!

Если записи в файле одинаковой длины, то их сортировка
практически не отличается от сортировки массива.

--
Regards, LVT.


Рамиль_   (2007-03-04 12:57:00) [8]

Для файлов, насколько я помню, надо использовать сортировку слиянием.


Наверх

Титульная страница Поиск, карта сайта Написать письмо