русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Изменение реакции на ошибку


Дата добавления: 2013-12-23; просмотров: 1601; Нарушение авторских прав


Пример использования файлов

 

Задача. В текстовом файле f.txt записаны (вперемешку) целые числа: поровну отрицательных и положительных. Используя только один вспомогательный файл, переписать в текстовый файл h.txt все эти числа так, чтобы:

· порядок отрицательных чисел был сохранен;

· порядок положительных чисел был сохранен;

· любые два числа, стоящие рядом, имели разные знаки.

 

Решение

 

Если бы нам разрешили использовать два вспомогательных файла, мы бы просто переписали все положительные числа в один из них, а все отрицательные - в другой. А затем объединили бы два этих файла. В нашем же случае придется переписать во вспомогательный файл только положительные числа. Затем при "сборке" мы будем считывать из вспомогательного файла "все подряд", а из исходного - только отрицательные числа.

 

Реализация

 

program z1;

var f,g,h: text;

k: integer;

begin

assign(f,'f.txt');

assign(g,'g.txt');

assign(h,'h.txt');

{Переписываем положительные числа в доп.файл}

reset(f);

rewrite(g);

while not eof(f) do

begin read(f,k);

if k>0 then write(g,k,' ');

end;

{Собираем числа в новый файл h.txt}

reset(f); {Возвращаем указатель на начало файла f}

reset(g);

rewrite(h);

while not eof(g) do

begin read(g,k);

write(h,k,' ');

repeat

read(f,k)

until k<0;

write(h,k,' ');

end;

close(f);

close(g);

close(h);

end.

 

 

По умолчанию любая ошибка ввода или вывода вызывает аварийную остановку работы программы. Однако существует возможность отключить такое строгое реагирование; в этом случае программа сможет либо игнорировать эти ошибки (что, правда, далеко не лучшим образом отразится на результатах ее работы), либо обрабатывать их при помощи системной функции IOResult: integer.



 

Директива компилятора1) {$I-} отключает режим проверки, соответственно директива {$I+} - включает.

 

Если при отключенной проверке правильности ввода-вывода ({$I-}) происходит ошибка, то все последующие операции ввода-вывода игнорируются - вплоть до первого обращения к функции IOResult. Ее вызов "очищает" внутренний показатель ("флаг") ошибки, после чего можно продолжать ввод или вывод.

 

Если функция IOResult возвращает 0, значит, операция ввода-вывода была завершена успешно. В противном случае функция вернет номер произошедшей ошибки.

 

Пример использования директив {$I}

 

flag:= false;

write('Введите имя файла: ');

repeat

readln(s); {s:string}

{$I-}

assign(f,s);

reset(f);

case IOResult of

0: flag:= true;

3: write('Путь к файлу указан неверно. Измените путь: ');

5: write('Доступа к файлу нет. Измените имя файла: ');

152: write('Такого диска нет. Измените имя диска: ');

else write('Такого файла нет. Измените имя файла: ');

end;

until flag;

{$I+}

 

Номер ошибки Описание ошибки Генерирующие процедуры
File not found Файл не найден append, erase, rename, reset, rewrite
Path not found Директория не найдена append, chdir, erase, mkdir, rename, reset, rewrite, rmdir
Too many open files Открыто более 15 файлов одновременно append, reset, rewrite
File access denied Отказ в доступе к файлу append, blockread, blockwrite, erase, mkdir, read, readln, rename, reset, rewrite, rmdir, write, writeln
Invalid file access code Попытка использовать текстовый файл как типизированный или наоборот append, reset
Cannot remove current directory Невозможно удалить заданную директорию rmdir
Disk read error Попытка чтения после конца файла read, readln
Disk write error Ошибка записи на диск (диск полон) close, write, writeln
File not assigned Файл не назначен append, erase, rename, reset, rewrite
File not open Файл не открыт{бинарные файлы} blockread, blockwrite, close, eof, filepos, filesize, read, seek, write
File not open for input Файл не открыт для ввода {текстовые файлы} eof, eoln, read, readln, seekeof, seekeoln
File not open for output Файл не открыт для вывода {текстовые файлы} write, writeln
Invalid numeric format Неправильный числовой формат {текстовые файлы} read, readln
Drive not ready Задано неверное имя диска append, erase, rename, reset, rewrite

 

 



<== предыдущая лекция | следующая лекция ==>
Пробельные символы | Назначение типизированного файла


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.