Вниз
Скачать: CL | DM;

Сортировка записей в текстовом файле   Найти похожие ветки 

 
azl ©   (2007-03-04 12:19) [0]

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

Есть одномерный массива А(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;


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

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

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

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

Спасибо.


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

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


 
Leonid Troyanovsky ©   (2007-03-04 13:27) [2]


> azl ©   (04.03.07 12:19)  

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

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

--
Regards, LVT.


 
azl ©   (2007-03-04 13:42) [3]

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


 
default ©   (2007-03-04 13:44) [4]

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


 
azl ©   (2007-03-04 13:49) [5]

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


 
default ©   (2007-03-04 13:58) [6]

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


 
azl ©   (2007-03-04 17:26) [7]

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


 
azl ©   (2007-03-05 17:35) [8]

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.041 c
3-1167905503
bolt
2007-01-04 13:11
2007.03.25
Description MS SQL -> Delphi DBGRID


3-1167462346
vidiv
2006-12-30 10:05
2007.03.25
проблема TADOQuery + MSAccess + Union


1-1169901169
Worst_87
2007-01-27 15:32
2007.03.25
SPI_SCREENSAVERRUNNING не работает...


15-1172575389
Empleado
2007-02-27 14:23
2007.03.25
"Blood Diamond"


15-1172765069
PHPdeveloper
2007-03-01 19:04
2007.03.25
проблема с установкой.




   Наверх