Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 399

/ вопрос решён /

Здравствуйте, эксперты!
Подскажите пожалуйста почему может выскакивать ошибка read beyond end of file. (останавливается работа программы на третьей строке с низу).

Приложение:
  1. AssignFile(stat,'statistika.txt');
  2.  
  3.  
  4. reset(stat);
  5. qw:=2;
  6. if FileSize(stat)<> 0 then
  7. while (not eof(stat)) or (qw<>101) do
  8. begin
  9. seek(stat,qw+1);
  10. read(stat,stmas[qw]);
  11. qw:=qw+1;
  12. end;


MerryJane Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: MerryJane (статус: Посетитель)
Вопрос отправлен: 11 июня 2011, 18:55
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Gooddy

Здравствуйте, MerryJane!
Ошибка у вас в том что вы проверяете на eof, а затем переходите на следующую запись!

...while (not eof(stat)) or (qw<>101) do //Тут у нас eof нету!
... begin
... seek(stat,qw+1); //А теперь передвинулись и вышли за пределы файла!
... read(stat,stmas[qw]); //А тут пытаемся прочитать за концом света =)
... qw:=qw+1; //И ещё счётчик увеличиваем!
... end;

Приложение:
  1. if FileSize(stat)<> 0 then
  2. begin
  3. seek(stat,qw);
  4. while (not eof(stat)) or (qw<>101) do
  5. begin
  6. read(stat,stmas[qw]);
  7. qw:=qw+1;
  8. seek(stat,qw);
  9. end;
  10. end


Ответ отправил: Gooddy (статус: 3-ий класс)
Время отправки: 12 июня 2011, 06:57
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 12 июня 2011, 23:07; участников в обсуждении: 4.
bugmenot

bugmenot (статус: 3-ий класс), 11 июня 2011, 19:34 [#1]:

Файл такой. Очевидно, что в файле 'statistika.txt' нет сотни записей.
виконання програми розпочинається з того самого мiсця, де призупинилося.

MerryJane

MerryJane (статус: Посетитель), 11 июня 2011, 20:05 [#2]:

так поэтому ограничение одно из not eof(stat)
bugmenot

bugmenot (статус: 3-ий класс), 11 июня 2011, 20:37 [#3]:

Цитата (MerryJane):

так поэтому ограничение одно из not eof(stat)

только потом идет Seek "вперед" и наступает полный Eof уже без проверки.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy

Gooddy (статус: 3-ий класс), 12 июня 2011, 07:00 [#4]:

Кстати, почему у вас там стоит qw<>101?
Вы не хотите считывать 101-ую запись?
Тогда нужно ставить не or а and.
А то сейчас прога завалится на 101 записи.
Чисти код! Чисти код! Чисти код!
Haenta

Haenta (статус: Посетитель), 12 июня 2011, 12:35 [#5]:

Добрый день, у моей одногруппницы - MerryJane - проблемы с интернетом и она не может зайти на сайт =-(
Она просила передать спасибо за ответ (уверена, что как только у неё наладится интернет, она его оценит)

Сообщение MerryJane:
"or (qw=100) do исправила вот это и теперь выскакивает ошибка
progect1.exe faulted with message : access violation at 0x00030e78.
а за ней загружается страница с cpu"
А кофе на клавиатуру тоже вирус пролил?
bugmenot

bugmenot (статус: 3-ий класс), 12 июня 2011, 19:56 [#6]:

вообще там Seek совсем не нужен
виконання програми розпочинається з того самого мiсця, де призупинилося.

MerryJane

MerryJane (статус: Посетитель), 12 июня 2011, 20:41 [#7]:

ошибка о которой и писала виктория(от моего имени спасибо ей большое) оказалась не в этом цикле.
Всем спасибо кто откликнулся(=

12 июня 2011, 20:42: Статус вопроса изменён на решённый (изменил автор вопроса — MerryJane)

Gooddy

Gooddy (статус: 3-ий класс), 12 июня 2011, 23:07 [#8]:

Всегда пожалуйста.
Чисти код! Чисти код! Чисти код!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.03 сек.