Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

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

 
Zhanna   (2009-11-12 16:19) [0]

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


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

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


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

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


 
MBo ©   (2009-11-12 16:42) [3]

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


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

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;


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

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


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


> 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;


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


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

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


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

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


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

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


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


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


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

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


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

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


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

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


 
MBo ©   (2009-11-12 17:18) [13]

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


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

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


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


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



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


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

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

n:=filesize(F_biblioteka);

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

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

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

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


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


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


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


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

О ДА. спасибо



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

Текущий архив: 2010.01.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
2-1258031986
Zhanna
2009-11-12 16:19
2010.01.03
Сортировка файла по дате


1-1231767209
TStas
2009-01-12 16:33
2010.01.03
Как сделать из gif ов bmp?


15-1257160759
JohnKorsh
2009-11-02 14:19
2010.01.03
Не посоветует ли кто книгу по работе с сетями из Дельфи?


2-1257870760
Zheksonz
2009-11-10 19:32
2010.01.03
Пересечение прямой и окружности


2-1258016441
Иван
2009-11-12 12:00
2010.01.03
Как экспортировать ListView в Excel?