доброго времени суток! Хотелось бы узнать, почему у меня проверка, котторая стоит в модуле не работает в основной программе.. в частности проверка на наличие файла на диске..
Что значит "не работает"? Все прекрасно работает, запусти программу пошагово и убедись... Другое дело - что ты здесь:
{$I-} err:=main(filename,ret); close (f); { <--- } {$I+} clrscr;
закрываешь файл, который в принципе никогда не может быть открытым, причем делаешь это при {$I-}, и при попытке распечатать результат в Case эта ошибка и выходит наружу...
priboltik
4.03.2007 3:03
Цитата(volvo @ 3.03.2007 22:38)
Что значит "не работает"? Все прекрасно работает, запусти программу пошагово и убедись... Другое дело - что ты здесь:
{$I-} err:=main(filename,ret); close (f); { <--- } {$I+} clrscr;
закрываешь файл, который в принципе никогда не может быть открытым, причем делаешь это при {$I-}, и при попытке распечатать результат в Case эта ошибка и выходит наружу...
т.е. в принципе загвоздка в том что нужно в модуле файл закрывать. так???
Добавлено через 3 мин. кстати, если при контроль ошибок не выключать, а проверку на IOResult <>0 ставить, то в принципе работать будет???
volvo
4.03.2007 3:12
Цитата
принципе загвоздка в том что нужно в модуле файл закрывать.
Да... Дело-то все в том, что в модуле ты работаешь с локально описанным файлом, который никак не связан с тем, который описан глобально в основной программе...
Цитата
если при контроль ошибок не выключать, а проверку на IOResult <>0 ставить, то в принципе работать будет???
Нет... Тогда сразу при возникновении ошибки программа прервется. {$I-} маскирует ошибку, чтобы ее можно было проанализировать...
priboltik
4.03.2007 3:25
Цитата(volvo @ 3.03.2007 23:12)
Да... Дело-то все в том, что в модуле ты работаешь с локально описанным файлом, который никак не связан с тем, который описан глобально в основной программе...
это понятно. спасибо..
Цитата(volvo @ 3.03.2007 23:12)
Нет... Тогда сразу при возникновении ошибки программа прервется. {$I-} маскирует ошибку, чтобы ее можно было проанализировать...
until ioresult=0; read(f1,str); close(f1); readln; readln; end.
здесь вроде должо все работать.. а ошибка все равно вылетает....
volvo
4.03.2007 3:55
Ты не учитываешь одну очень незначительную деталь:
Цитата(TP Help - IOResult)
I/O-checking must be off--{$I-}--to trap I/O errors using IOResult. If an I/O error occurs and I/O-checking is off, all subsequent I/O operations are ignored until a call is made to IOResult. A call to IOResult clears the internal error flag.
То есть здесь:
until ioresult=0; { <--- }
IOResult уже как раз = 0 (ты уже обращался один раз к IOResult, и его значение после обращения было очищено - сброшено в 0), и ты пытаешься читать из файла, которого нет... Решение:
repeat
writeln('file name: '); readln(name); {$I-} assign(f1,name); reset(f1); {$I+} IOR := ioresult; if ior<>0 then begin clrscr; writeln('file not found'); end; writeln;
until ior=0;
priboltik
4.03.2007 4:45
Все понятно.. спасибо
priboltik
4.03.2007 14:18
так задача вроде работает..вот толко при выводе тех строк, кот. входят в строку, выводится нули.. не могу понять где ошибка..
Нет, так не пойдет... Ты укажи строки, в которых программа работает неверно, а то там у тебя черт ногу сломит - ничего не разберешь...
priboltik
4.03.2007 15:26
Цитата(volvo @ 4.03.2007 10:35)
Нет, так не пойдет... Ты укажи строки, в которых программа работает неверно, а то там у тебя черт ногу сломит - ничего не разберешь...
скорее всего где-то здесь
Cifr[i] := Cifr[i] + 1;
и наверное здесь:
if filesize(f)=0 then main:=-3 {pustoy fail} else begin max:=cifr[0]; for i := 0 to 9 do if Cifr[i] > max then begin max := Cifr[i]; Main := 0; ret := max; end; if max=cifr[0] then main:=-4; {cifirki koroche net}
если честно, не очень понимаю, как это здесь делается.. и для чего вообще нужен массив Cifr ....препод написал, а доступно объяснить ему было не судьба...
volvo
4.03.2007 15:35
Цитата
вот толко при выводе тех строк, кот. входят в строку, выводится нули..
В приведенных тобой строках НИЧЕГО не выводится...
priboltik
4.03.2007 17:09
Цитата(volvo @ 4.03.2007 11:35)
В приведенных тобой строках НИЧЕГО не выводится...
в них не выводится.. в них считается и формируется массив..а выводится из него в главной программе...
volvo
4.03.2007 17:22
Да блин!!! ПОКАЖИ, ГДЕ?????
Твою программу же ЧИТАТЬ невозможно, неужели же ты этого не видишь???
priboltik
4.03.2007 18:32
кстати.. а если мы берем переменную прямо из модуля,ее не нужно ведь описывать в главной программе..????
volvo
4.03.2007 18:35
Смотря где она описана в модуле...
priboltik
4.03.2007 21:18
описана она в модуле как параметр в функции
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.