Вот прога, цель создать отчёт о метеонаблюдеениях, свой тип я сделал, это без проблем, а вот 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
22.01.2008 3:58
Это Дельфийская функция, из модуля SysUtils, а у тебя какой компилятор?
SkyRideR
22.01.2008 13:45
Стандартный паскалевский, который при установке ставится. Я вчера читал, что вроде этой функцией в паскале можно пользоваться.
klem4
22.01.2008 13:47
напиши свой file_exists, открывая файл для чтений, юзая директиву {$I-}, а потом анализируя результат IOResult
volvo
22.01.2008 13:50
Вот и я про это. Значит, функцию FileExists тебе придется написать самостоятельно, или обойтись без функции: воспользоваться директивой {$I-} и функцией IOResult для определения, успешно ли открылся файл на чтение. Если открытие на чтение (reset) закончилось ошибкой (IOResult <> 0) - значит открывать файл на запись (rewrite)...
SkyRideR
23.01.2008 3:02
ну в общем модуль с функцией 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
23.01.2008 3:21
Цитата
там где фигурные скобки и жирным шрифтом,говорит что error in expression
Правильно говорит, ибо Reset - это не функция, а процедура, и не может участвовать в выражениях...
SkyRideR
23.01.2008 3:27
а как бы тогда сделать, что бы если файл уже открыт, он(курсор) перемещался в конец файла, просто seek тоже ошибку выдал 122, вот я и встрял
volvo
23.01.2008 3:55
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
23.01.2008 4:11
уже сделал, понял что лишнее и убрал(это про тип), а модуль компилируется, но в нём по ходу косяк, пока не понял где именно. п.с. короче он не как надо работает, не проверят ни чего, каждый раз по новой файл этот создаёт.
volvo
23.01.2008 13:04
Цитата
а модуль компилируется, но в нём по ходу косяк
Повторяю еще раз: в том виде, в котором ты его привел, модуль компилироваться не будет (ну вот нельзя делать предварительное описание функции без имени, вот такой вот Паскаль капризный), поэтому разбирайся с косяками сам (если ты привел сюда одно, а работаешь - с другим, то и косяк может быть не тот, что виден здесь, а другой!)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.