Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.06.2009, 21:56
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
Печаль Сортировка

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

Нужно сортировать прям ВНУТРИ файла (типизированного) данные. Внутри - тоесть не выгружать в массив, сортировать и записывать, а делать всё в самом файле. С массивом и я смогу. Вся проблема вот в чем.

Файл своего типа. тип этот - тип записи.

Код:
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  
Старый 10.06.2009, 22:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так и заменять.
Использовать функцию Seek для позиционирования в файле. Ну и 2 буферные переменные для обмениваемых элементов.
Ответить с цитированием
  #3  
Старый 10.06.2009, 22:48
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

в этом то и есть вся проблема. что использовать знаю, как применить приблизительно понимаю, но осуществить не получается..
Ответить с цитированием
  #4  
Старый 11.06.2009, 06:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

При такой структуре, как вы задали, сортировать внутри одного файла нельзя т.к. стринг неимеет четкого размера и следовательно заменить одну запись на другую нельзя без повреждения целостности данных. (непонятно почему вообще Дельфи вам позволил сделать файл такой структуры). В этой ситуации можно, да и нужно сделать индексный файл и уже его сортировать как вам угодно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 11.06.2009, 09:03
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

прочитайте внимательно мой самый первый пост...

Нужно не на делфи а на паскале (Turbo Pascal или Free Pascal). Это раз. Два - сравнениее тут идет не по строкам а по dat2 (array[1..3] of integer. Хотя и строки тоже можно сравнивать (это так, к слову).
Ответить с цитированием
  #6  
Старый 11.06.2009, 10:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Дело не в сравнении, а в том, сколько байт выделит паскаль под ваши переменные:
name: string;
date: string;
Хорошо если по максимуму 255, а если это не так? Какой размер у вас возвращается в SizeOf(Zapis) ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 11.06.2009, 16:28
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

Всё расчитано под данную программу. Размеры текста 20-50 байт, не больше, с огрничениями при вводе данных. sizeof не нужен.

Поломав голову, попыхтев, подумав хорошо, пересмотрев все сначала решил эту проблему с сортировкой.. Всё работает на ура. Спасибо всем кто отписывался.
Ответить с цитированием
  #8  
Старый 11.06.2009, 18:14
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Всё конечно замечательно, но если тема уже открыта, будь добр закрой обсуждение либо примером текста, либо исходником ;-)
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter