Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2010, 11:36   #1
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию Чтение из типизированного файла с последней записи и до первой

Нужно вывести на экран записи которые хранятся в файле. Но вывести надо начиная с последней записи и заканчивая первой. Я уже измучился. Записи выводятся в перемешку. Помогите кто может.

Вот мой код:

program zapisi2;
USES crt;
type
info = record
Nomer : integer;
Tovar : string[30];
Stoimost : extended;
end;
var f : file of info;
z : info;
i, Cnt : integer;
begin
clrscr;
Assign(f,'d:\kurspascal\xxx.dat');
Reset(f);
writeln(' Номер | Наименование товара | Стоимость |');
writeln('------------------------------------------');
writeln;
Cnt := FileSize(f);
for i:=Cnt downto 1 do begin
seek(f,i);
while not EOF(f) do begin
Read(f, z);
writeln(' ',z.Nomer,' ', z.Tovar,' ', z.Stoimost:0:2);
writeln;
end;
end;
readln;
Close(f);
end.

Вот такая фигня получается:

sshot-1.jpg
vmilyoshin вне форума Ответить с цитированием
Старый 28.04.2010, 11:48   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Ну и что ты делаешь тут???
Код:
Cnt := FileSize(f);
for i:=Cnt downto 1 do begin
seek(f,i);
while not EOF(f) do begin
Read(f, z);
Устанавливаешь указатель файловой переменной на элемент файла, а потом в цикле читаешь все подряд до конца файла...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 28.04.2010, 12:06   #3
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию

Ну а как правильно. Я в этом деле ещё лопух.
vmilyoshin вне форума Ответить с цитированием
Старый 28.04.2010, 12:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Cnt := FileSize(f);
for i:=Cnt downto 1 do begin
seek(f,i);
Убери это совсем. Оставь чтение только в while not EOF(f), он сам до конца дочитает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2010, 12:24   #5
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Убери это совсем. Оставь чтение только в while not EOF(f), он сам до конца дочитает
Убрал. И что получается:

sshot-2.jpg

А мне нужно вывести начиная с последней записи и заканчивая первой.
vmilyoshin вне форума Ответить с цитированием
Старый 28.04.2010, 13:04   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

может так проще?
Код:
  Cnt := FileSize(f);
  for i:=Cnt-1 downto 0 do begin
     seek(f,i);
     Read(f, z);
     writeln(' ',z.Nomer,' ', z.Tovar,' ', z.Stoimost:0:2);
     writeln;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.04.2010, 13:08   #7
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Если
Цитата:
А мне нужно вывести начиная с последней записи и заканчивая первой.
то все-таки нужно так:
Код:
Cnt := FileSize(f);
for i:=Cnt downto 1 do begin
seek(f,i-1);
Read(f, z);
writeln(' ',z.Nomer,' ', z.Tovar,' ', z.Stoimost:0:2);
writeln;
end;
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 28.04.2010, 15:34   #8
vmilyoshin
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 66
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
может так проще?
Код:
  Cnt := FileSize(f);
  for i:=Cnt-1 downto 0 do begin
     seek(f,i);
     Read(f, z);
     writeln(' ',z.Nomer,' ', z.Tovar,' ', z.Stoimost:0:2);
     writeln;
  end;
Спасибо огромное! Всё получилось с этим кодом.
vmilyoshin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
присвоить переменной значение поля в последней записи таблицы KaimNotark БД в Delphi 1 03.02.2010 07:21
Как выделить диапазон колонок зная номера первой и последней колонки? puzanov1973 Microsoft Office Excel 1 23.01.2010 19:56
ПОЛУЧИТЬ ВСЕ СИМВОЛЫ, РАСПОЛОЖЕННЫЕ МЕЖДУ ПЕРВОЙ И ПОСЛЕДНЕЙ ТОЧКАМИ MMARKIN Паскаль, Turbo Pascal, PascalABC.NET 7 13.04.2009 09:48
Поиск последней записи в определенной строке Maxx Microsoft Office Excel 5 04.03.2009 14:01
Отображение первой записи таблицы DBLookupComboBox фЁдОр БД в Delphi 14 06.01.2008 17:04