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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 23:12   #1
olga_v95
Пользователь
 
Регистрация: 11.02.2013
Сообщений: 12
По умолчанию Условие для проверки файла на пустоту Pascal

Какое условие поставить, чтобы проверить пустой ли файл
olga_v95 вне форума Ответить с цитированием
Старый 17.03.2013, 23:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
assing();
Reset(...);
if eof(..) then файл пуст.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.03.2013, 00:02   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Сначала нужно определиться, что значит "файл пустой":
- должен ли он иметь длину равную 0,
- должен ли он состоять исключительно из незначащих элементов (например, из нулей или символов пробела),
- должен ли он содержать признак конца файла в первой позиции,
- должны ли все содержащиеся в нем объекты содержать признак неактуальности/недействительности,
...
s-andriano вне форума Ответить с цитированием
Старый 18.03.2013, 01:24   #4
olga_v95
Пользователь
 
Регистрация: 11.02.2013
Сообщений: 12
По умолчанию

Должен иметь длину равную 0
Файл текстовый

Последний раз редактировалось olga_v95; 18.03.2013 в 01:27.
olga_v95 вне форума Ответить с цитированием
Старый 18.03.2013, 02:40   #5
nati_94
Пользователь
 
Регистрация: 18.02.2013
Сообщений: 25
По умолчанию

Цитата:
Сообщение от olga_v95 Посмотреть сообщение
Должен иметь длину равную 0
Файл текстовый
например
if (feof(file)) break;
nati_94 вне форума Ответить с цитированием
Старый 18.03.2013, 09:25   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ольга, Вам же уже предложили готовый работающий код!

вот Вам ДВА различных варианта. Оба работают. Выбирайте тот, что больше нравится/понятнее...

вариант 1.
Код:
var f : Text;
begin
  Assign(f, 'D:\test2.txt');
  Reset(f);
  if eof(f)
    then WriteLn('Файл имеет размер равный нулю!')
    else WriteLn('файл имеет НЕ нулевой размер.');
  Close(f);
  
  Readln
end.
вариант 2.
Код:
var f : file; 
begin
  Assign(f, 'D:\test2.txt');
  Reset(f);
  if FileSize(f)=0 
    then WriteLn('Файл имеет размер равный нулю!')
    else WriteLn('файл имеет НЕ нулевой размер.');
  Close(f);
  
  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2013, 10:20   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от olga_v95 Посмотреть сообщение
Должен иметь длину равную 0
Файл текстовый
1. Строго говоря, если файл имеет длину 0, то говорить о внутренней структуре не приходится. Поэтому вряд ли можно доподлинно утверждать, что такой файл является текстовым (хотя, никаких противоречий в этом тоже нет).
2. Если доподлинно известно, что файл именно текстовый, то проверка его на длину не дает уверенности, что он не пустой - текстовый файл может иметь длину большую 0 и при этом быть пустым.
s-andriano вне форума Ответить с цитированием
Старый 18.03.2013, 10:54   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вот Вам ДВА различных варианта. Оба работают. Выбирайте тот, что больше нравится/понятнее...
Вообще говоря, эти два варианта не эквивалентны.
И, строго говоря, должны выдавать разный результат на файле, содержащем единственный символ #26 (EOF - конец файла).
Не знаю, как в других компиляторах, но в ТМТ этот стандарт нарушается.
s-andriano вне форума Ответить с цитированием
Старый 18.03.2013, 11:07   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano
Вообще говоря, эти два варианта не эквивалентны.
И, строго говоря, должны выдавать разный результат на файле, содержащем единственный символ #26 (EOF - конец файла).
угу. всё так! И, строго говоря, Вы правы!

Тем более надо выбирать универсальный вариант с var f : file of byte; и FileSize(f)=0!

кстати, рекомендую обратить внимание, файл должен быть типизированный (file of byte или file of char):
Код:
var f : file of char;  { или можно f : file of byte;} 
begin
  Assign(f, 'D:\test2.txt');
  Reset(f);
  WriteLn('File size = ', FileSize(f));
  if FileSize(f)=0
    then WriteLn('Файл имеет размер равный нулю!')
    else WriteLn('файл имеет НЕ нулевой размер.');
  Close(f);
  
  Readln
end.

Последний раз редактировалось Serge_Bliznykov; 18.03.2013 в 11:11.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить условие проверки вхождения числа в заданный диапазон (Delphi) Hylim1991 Помощь студентам 1 22.03.2012 08:16
.NET Алгоритм проверки каждые n мсек наличие файла в текущей директории omigos99 Общие вопросы .NET 2 10.12.2011 19:37
pascal, условие ser2live Помощь студентам 0 04.06.2011 02:41
Разработать учебную программу для проверки знаний студентами алфавита языка Pascal dimok5 Паскаль, Turbo Pascal, PascalABC.NET 1 06.04.2011 11:38
проверка файла на пустоту vitaliy1911 Общие вопросы Delphi 7 19.05.2010 22:16