![]() |
|
|
#1
|
|||
|
|||
сам понимаю, за это надо оторвать руки и ноги, но не получается сделать сортировку внутри файла на паскале. помогите пожалуйста.Нужно сортировать прям ВНУТРИ файла (типизированного) данные. Внутри - тоесть не выгружать в массив, сортировать и записывать, а делать всё в самом файле. С массивом и я смогу. Вся проблема вот в чем. Файл своего типа. тип этот - тип записи. Код:
type
zapis = record
name: string;
date: string;
dat2: array[1..3] of integer;
pol: char;
end;это сама запись. Код:
for count_bt := 1 to 3 do
begin
i:=1;
repeat
flg := 0;
for j:=1 to n do
if z[j].dat2[count_bt] < z[j+1].dat2[count_bt] then
begin
z2 := z[j];
z[j] := z[j+1];
z[j+1] := z2;
flg := 1;
end;
inc(i);
until (flg = 0) and (i<=n);
end;
//
z - переменная типа этой записиа это сортировка ( не в файле). как её заменить на сортировку в файле? метод сортировки любой. буду присильно благодарен |
|
#2
|
|||
|
|||
|
Ну так и заменять.
Использовать функцию Seek для позиционирования в файле. Ну и 2 буферные переменные для обмениваемых элементов. |
|
#3
|
|||
|
|||
|
в этом то и есть вся проблема. что использовать знаю, как применить приблизительно понимаю, но осуществить не получается..
|
|
#4
|
||||
|
||||
|
При такой структуре, как вы задали, сортировать внутри одного файла нельзя т.к. стринг неимеет четкого размера и следовательно заменить одну запись на другую нельзя без повреждения целостности данных. (непонятно почему вообще Дельфи вам позволил сделать файл такой структуры). В этой ситуации можно, да и нужно сделать индексный файл и уже его сортировать как вам угодно.
|
|
#5
|
|||
|
|||
|
прочитайте внимательно мой самый первый пост...
Нужно не на делфи а на паскале (Turbo Pascal или Free Pascal). Это раз. Два - сравнениее тут идет не по строкам а по dat2 (array[1..3] of integer . Хотя и строки тоже можно сравнивать (это так, к слову). |
|
#6
|
||||
|
||||
|
Дело не в сравнении, а в том, сколько байт выделит паскаль под ваши переменные:
name: string; date: string; Хорошо если по максимуму 255, а если это не так? Какой размер у вас возвращается в SizeOf(Zapis) ? |
|
#7
|
|||
|
|||
|
Всё расчитано под данную программу. Размеры текста 20-50 байт, не больше, с огрничениями при вводе данных. sizeof не нужен.
Поломав голову, попыхтев, подумав хорошо, пересмотрев все сначала решил эту проблему с сортировкой.. Всё работает на ура. Спасибо всем кто отписывался. ![]() |
|
#8
|
||||
|
||||
|
Всё конечно замечательно, но если тема уже открыта, будь добр закрой обсуждение либо примером текста, либо исходником ;-)
|