Помощь - Поиск - Пользователи - Календарь
Полная версия: Не большая проблема с прогой
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SkyRideR
Вот прога, цель создать отчёт о метеонаблюдеениях, свой тип я сделал, это без проблем, а вот fileexists говорит
unknown identifier, как я понял это функция какого-то модуля, но какого не знаю.
type
tMeteo = record
year, digit, vlazhn, atmdav : integer;
month, vsutok, napvet, osadki : string;
tempvoz, skorvet : real;
end;
var
pon : tMeteo;
f : file of tMeteo;
begin
assign(f,'c:\meteo.pog');
if fileexists('c:\meteo.pog') then
reset(f) else
rewrite(f);
if reset(f) then seek(filesize(f));
write(pon.year);
read(pon.year);
end.
volvo
Это Дельфийская функция, из модуля SysUtils, а у тебя какой компилятор?
SkyRideR
Стандартный паскалевский, который при установке ставится. Я вчера читал, что вроде этой функцией в паскале можно пользоваться.
klem4
напиши свой file_exists, открывая файл для чтений, юзая директиву {$I-}, а потом анализируя результат IOResult
volvo
Вот и я про это. Значит, функцию FileExists тебе придется написать самостоятельно, или обойтись без функции: воспользоваться директивой {$I-} и функцией IOResult для определения, успешно ли открылся файл на чтение. Если открытие на чтение (reset) закончилось ошибкой (IOResult <> 0) - значит открывать файл на запись (rewrite)...
SkyRideR
ну в общем модуль с функцией fileExists я сделал вроде работает, а вот с прогой опять косяк, там где фигурные
скобки и жирным шрифтом,говорит что error in expression. на уроке препод сказал что так вроде будет работать, а стал пробовать и фига с маслом,
unit sysunit;
interface
type
tMeteo = record
year, digit, vlazhn, atmdav : integer;
month, vsutok, napvet, osadki : string;
tempvoz, skorvet : real;
end;
function (opr : string): boolean;
implementation
function fileExists(opr : string): boolean;
var f : file of tMeteo;
begin
assign(f, 'opr');
{$I-}
reset(f);
if IOResult = 0 then begin close(f);
fileExists:= true end else
fileExists:= false;
{$I+}
end;
end.

program pogoda;
uses sysunit;
type
tMeteo = record
year, digit, vlazhn, atmdav : integer;
month, vsutok, napvet, osadki : string;
tempvoz, skorvet : real;
end;

var

pon : tMeteo;
f : file of tMeteo;
begin
assign(f,'c:\meteo.pog');
if fileexists('c:\meteo.pog') then
reset(f) else
rewrite(f);
{if reset(f) then seek(filesize(f)); }
write(pon.year);
read(pon.year);
end.
volvo
Цитата
там где фигурные скобки и жирным шрифтом,говорит что error in expression
Правильно говорит, ибо Reset - это не функция, а процедура, и не может участвовать в выражениях...
SkyRideR
а как бы тогда сделать, что бы если файл уже открыт, он(курсор) перемещался в конец файла, просто seek тоже ошибку выдал 122, вот я и встрял
volvo
begin
assign(f,'c:\meteo.pog');
if fileexists('c:\meteo.pog') then reset(f)
else rewrite(f);

seek(f, filesize(f)); { <--- в любом случае... }
write(pon.year);
seek(f, filesize(f) - 1); { <--- читать будем то, что только что записали }
read(pon.year);
end.

Если файл уже был и открылся через reset, то filesize вернет его размер и ты перейдешь в конец файла. Если же файл только что был создан rewrite-ом, то filesize вернет 0, и ты останешься в самом начале (он же - конец) пустого файла... А вот перед чтением надо вернуться хотя бы на одну запись "назад" (ближе к началу файла), иначе при попытке чтения за концом файла твоя программа завершится аварийно.

Кстати, что у тебя творится в модуле? Оно ж не будет компилироваться... Это во первых.

Во-вторых, описание типа TMeteo, которое в модуле и которое в основной программе - это разные типы (для Паскаля, конечно) так что как пить дать ты получишь где-нибудь ошибку "несовместимый тип", сразу предупреждаю... Лучше убери описание из основной программы, оставь только в модуле...
SkyRideR
уже сделал, понял что лишнее и убрал(это про тип), а модуль компилируется, но в нём по ходу косяк, пока не понял где именно.
п.с. короче он не как надо работает, не проверят ни чего, каждый раз по новой файл этот создаёт.
volvo
Цитата
а модуль компилируется, но в нём по ходу косяк
Повторяю еще раз: в том виде, в котором ты его привел, модуль компилироваться не будет (ну вот нельзя делать предварительное описание функции без имени, вот такой вот Паскаль капризный), поэтому разбирайся с косяками сам (если ты привел сюда одно, а работаешь - с другим, то и косяк может быть не тот, что виден здесь, а другой!)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.