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

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

Сортировка файла по дате


Zhanna ©   (2009-11-12 16:19:00) 

Здравствуйте! Помогите пожалуйста осуществить сортировку файла по дате методом Шелла. У меня сортируется только по дню или вообще выдает сообщение об ошибке...


Zhanna   (2009-11-12 17:35:00) [1]

О ДА. спасибо


Сергей М.   (2009-11-12 17:28:00) [2]


> не знаю что такое ликбез


ЛИКвидация БЕЗграмотности


Сергей М.   (2009-11-12 17:27:00) [3]


> думала что все уместится



> думала что все уместится


А вот не надо делать таких предположений, даже если задача учебная.

У тебя же есть размер файла

n:=filesize(F_biblioteka);

Подели его на размер одной записи и установи размер (см. SetLength) массива m равным полученному значению, заменив оъявление этого массива на

m: array of TDate; //т.е. сделав этот массив динамическим

Теперь в for-цикле для j от 0 до Length(m)-1 читай из файла записи и заполняй элементы массива:

m[j] := StrToDate(B.data); //предполагая что дата в файле фигурирует в строковом формате ДД.ММ.ГГГГ


Zhanna   (2009-11-12 17:22:00) [4]

Я не знаю что такое ликбез. что это?но то что есть на ссылке очень похоже на мою программу.


MBo   (2009-11-12 17:18:00) [5]

Для начала нуже ликбез
http://www.delphikingdom.ru/lyceum/seminar.asp?ID=2
а именно:
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=843


Zhanna   (2009-11-12 17:16:00) [6]

Сергей, я скажу прямо большую часть процедуры я не понимаю. поэтому вопросы как ты собиралась ставят меня в тупик. если можно просто скажите что удалить а что исправить. и если можно почему. но это уже наверное непозволительная роскошь?


Zhanna   (2009-11-12 17:12:00) [7]

я не совсем поняла вопрос. у меня будет где то 20-50 записей. я думала что все уместится...


Сергей М.   (2009-11-12 17:07:00) [8]


> разве я не могу добавить 100 записей в файл?


Можешь.
Хоть миллион.

While not EOF() с таким количеством справится, а вот как ты собралась прочитав из файла этот миллион запихать его в массив размером в 100 (!) записей ?


Zhanna   (2009-11-12 17:03:00) [9]

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


Zhanna   (2009-11-12 17:02:00) [10]

а разве я не могу добавить 100 записей в файл? почему while not честно не знаю. а последнее это мои догадки по поводу того как сделать чтобы сортировка шла отдельна по дням,месяца и годам но куда это примкнуть не знаю...


MBo   (2009-11-12 16:58:00) [11]

Предположительно в файле находятся некие записи.
Их нужно прочитать в массив, и массви отсортировать по нужному полю.
Что именно не получается?


Сергей М.   (2009-11-12 16:53:00) [12]


> m:array[1.. 100] of integer;


С чего ты взяла, что в файле 100 строк ?
А если даже и так, то почему while not eof(f_biblioteka) ?


> begin
>  t:=B.data;
>     m[j]:=StrToInt(copy(t,7,4)+copy(t,4,2)+copy(t,0,2));
>
>    
> end;


А это что за непонятный огрызок от цикла ?
Где сам цикл-то ?


Zhanna   (2009-11-12 16:48:00) [13]

Знаю что все жутко. Но хоть что-то скажите


Zhanna   (2009-11-12 16:43:00) [14]

procedure Tform2.Sort_bibl ;
var
h,j,i,n,k,ch_s,ch_per,ch_s1,ch_s2,v,sd:integer;
t:string[10];
m:array[1..100] of integer;
buf:biblioteka;
label met;
begin
k:=0;ch_s:=0; ch_per:=0;  ch_s1:=0; ch_s2:=0;
reset(F_biblioteka);
n:=filesize(F_biblioteka);
while not eof(f_biblioteka) do
begin
seek(f_biblioteka,k);
read(f_biblioteka,B);
//m[k+1]:=B;
inc(k);
end;
begin
 t:=B.data;
    m[j]:=StrToInt(copy(t,7,4)+copy(t,4,2)+copy(t,0,2));
   
end;
closefile(f_biblioteka);
{Метод Щелла}
h:=n div 2;
while h<>0 do begin
for j:=h+1 to n do
 begin
 i:=j-h;
 v:=m[j];
 repeat
  if v>=m[i] then   goto met
                          else
                          begin
                          buf:=m[i+h];
                          m[i+h]:=m[i];
                         m[i]:=buf;
                          i:=i-h;
                          ch_per:=ch_per+1;
                          ch_s1:=ch_s1+1;
                          end;
  until i<=0;
  met:
    ch_s2:=ch_s2+1;

  end;
  h:=h div 2;
     ch_s:=ch_s1+ch_s2;
  end;
rewrite(f_biblioteka);
for i:=0 to n-1 do
begin
seek(f_biblioteka,i);
write(f_biblioteka);
end;
end;


MBo   (2009-11-12 16:42:00) [15]

если не выложишь, то уж точно ничего сказать не сможем


Zhanna   (2009-11-12 16:41:00) [16]

Здравствуйте. Проблема в том что я не понимаю что делаю. если я выложу текст процедуры вы можете сказать где ошибки?


Сергей М.   (2009-11-12 16:38:00) [17]

И чем же тебе помочь ?


Наверх

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