IPB

> Лекция №6.4: Ввод и вывод информации: текстовые файлы
Чат
Форум
Загрузка...
 

страницы: 1 2 3 4

Содержание

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

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

  1. порядок отрицательных чисел был сохранён;
  2. порядок положительных чисел был сохранён;
  3. любые два числа, стоящие рядом, имели разные знаки.
Решение

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

Реализация
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+}
Номер ошибкиОписание ошибкиГенерирующие процедуры2
 2 
File not foundФайл не найденAppend, Erase, Rename, Reset, Rewrite
 3 
Path not foundДиректория не найденаAppend, ChDir, Erase, MkDir, Rename, Reset, Rewrite, RmDir
 4 
Too many open filesОткрыто слишком много файлов одновременноAppend, Reset, Rewrite
 5 
File access deniedОтказ в доступе к файлуAppend, BlockRead, BlockWrite, Erase, MkDir, Read, ReadLn, Rename, Reset, Rewrite, RmDir, Write, WriteLn
 12 
Invalid file access codeПопытка использовать текстовый файл как типизированный или наоборотAppend, Reset
 16 
Cannot remove current directoryНевозможно удалить заданную директориюRmDir
 100 
Disk read errorПопытка чтения после конца файлаRead, ReadLn
 101 
Disk write errorОшибка записи на диск (диск полон)Close, Write, WriteLn
 102 
File not assignedФайл не назначенAppend, Erase, Rename, Reset, Rewrite
 103 
File not openФайл не открыт{бинарные файлы}BlockRead, BlockWrite, Close, Eof, FilePos, FileSize, Read, Seek, Write
 104 
File not open for inputФайл не открыт для ввода {текстовые файлы}Eof, Eoln, Read, ReadLn, SeekEof, SeekEoln
 105 
File not open for outputФайл не открыт для вывода {текстовые файлы}Write, WriteLn
 106 
Invalid numeric formatНеправильный числовой формат {текстовые файлы}Read, ReadLn
 152 
Drive not readyЗадано неверное имя дискаAppend, Erase, Rename, Reset, Rewrite

страницы: 1 2 3 4

Примечания

  1. ^ См. лекцию 1.
  2. ^ См. также лекцию 7.
 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"