|
#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
|
||||
|
||||
Всё конечно замечательно, но если тема уже открыта, будь добр закрой обсуждение либо примером текста, либо исходником ;-)
Нет повести печальнее на свете, чем повесть о заклиневшем Resete. |