Опубликован: 06.09.2005 | Доступ: свободный | Студентов: 12780 / 1211 | Оценка: 3.98 / 3.46 | Длительность: 12:50:00
ISBN: 978-5-9556-0025-3
Лекция 6:

Ввод и вывод информации: текстовые файлы

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Аннотация: Ввод информации из текстового файла. Вывод информации в текстовый файл. Оперирование текстовыми файлами.

Ввод и вывод: файлы

В первой лекции мы уже рассматривали ввод информации с клавиатуры и вывод ее на экран1Напомним, что эти два устройства объединяются под общим наименованием "консоль".. Однако процесс ввода с консоли весьма трудоемок, а результат вывода на консоль - недолговечен. К счастью, существует более удобный способ записывать, хранить, пересылать и по необходимости считывать информацию из постоянной памяти компьютера. Для этого применяются файлы.

Что такое файл

В последнее время студенты все реже задают этот вопрос, однако на него все-таки стоит дать короткий ответ.

Файл - это самостоятельная последовательность символов, записанная в постоянную память компьютера.

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

"Самостоятельность" файлов заключается в том, что они не зависят от работы какой-либо программы. И даже если выключить компьютер, файлы будут продолжать свое существование на винчестере или на дискете.

Файлы могут хранить в себе все, что поддается кодированию:

  • исходные тексты программ или входные данные (тесты);
  • машинные коды выполняемых программ (игры, вирусы, обучающие и сервисные программы, др.);
  • информацию о текущем состоянии какого-либо процесса;
  • различные документы, в том числе и Интернет-страницы;
  • картинки (рисунки, фотографии, видео);
  • музыку;
  • и т.д. и т.п.

Когда нужно использовать файлы

Выбор между консолью и файлами вам придется делать каждый раз, когда вы станете писать очередную программу.

Между тем ответ на вопрос, вынесенный в заголовок этого пункта, прост.

  • Файлы полезны, если объем входных данных превосходит посильный при ручном вводе. (Крайним является случай, когда входные или выходные данные заведомо не могут поместиться в оперативной памяти.)
  • Файлы нужны, если приходится многократно вводить одну и ту же информацию, с минимальными изменениями или вовсе без изменений (например, при отладке программы).
  • Файлы необходимы, если нужно сохранять информацию о результатах работы программы, полученных при вводе различных входных данных (то есть: при поиске ошибок в программе).

Например, если вашей программе необходимо получить два или три числа (пять - уже многовато) или строку длиной символов десять, вы вполне можете задавать такие данные с клавиатуры вручную. Если же вам (а еще вероятнее - не вам, а некоему усредненному и потому посредственному оператору) придется вводить, скажем, массив чисел 10х10, то вероятность ошибки при ручном вводе возрастает многократно. Значит, возможность этой ошибки нужно исключить: записать данные в файл, который легко отредактировать в случае необходимости. Кроме того, однажды созданный файл можно использовать многократно (может быть, с незначительными изменениями).

Разновидности файлов

В языке Pascal имеется возможность работы с тремя видами файлов:

  • текстовыми ;
  • типизированными;
  • нетипизированными.

Последние два типа объединяются под названием бинарные: информация в них записывается по байтам и потому недоступна для просмотра или редактирования в удобных для человека текстовых редакторах, зато такие файлы более компактны, чем текстовые.

В отличие от бинарных, текстовые файлы возможно создавать, просматривать и редактировать "вручную" - в любом доступном текстовом редакторе. Кроме того, при считывании данных из текстового файла нет необходимости заботиться об их преобразовании: в языке Pascal имеются средства автоматического перевода содержимого текстовых файлов в нужный тип и формат, и это позволяет сэкономить немало времени и сил.

Описание файлов

В разделе var переменные, используемые для работы с файлами ( файловые переменные ), описываются следующим образом:

var f1,f2: text; 	{текстовые файлы}
	g: file of <тип_элементов_файла>;	{типизированные файлы}
	in, out: file; 	{нетипизированные файлы}

Файловая переменная не может быть задана константой.

Текстовые файлы

В этой лекции мы ограничимся рассмотрением только текстовых файлов, а о типизированных расскажем позже (см. лекцию 7).

Оперирование файлами

С этого момента и до конца лекции под словом "файл" мы будем подразумевать " текстовый файл " (разумеется, если специально не оговорено обратное). Однако многие описываемые ниже команды пригодны не только для текстовых, но и для бинарных файлов.

Назначение файла

Процедура assign(f,'<имя_файла>'); служит для установления связи между файловой переменной f и именем того файла, за действия с которым эта переменная будет отвечать.

На разных этапах работы программы одной и той же файловой переменной можно присваивать разные значения. Например, если в начале программы мы напишем

assign(f,'input.txt');

то переменной f будет соответствовать файл, из которого производится считывание входных данных, вплоть до того момента, когда в программе встретится, скажем, команда

assign(f,'output.txt');

после которой переменной f будет уже соответствовать тот файл, куда выводятся результаты.

Строка '<имя_файла>' может содержать полный путь к файлу. Если путь не указан, файл считается расположенным в той же директории, что и исполняемый модуль программы. Именно этот вариант обычно считается наиболее удобным.

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Евгения Поздеева
Евгения Поздеева
Ольга Стебакова
Ольга Стебакова

Вот фрагмент лекции 5 (статья 4):

Проверка множества на пустоту может быть осуществлена довольно просто:

pusto:= true;   for i:= 1 to N do 

if set_arr[i] then begin pusto:= false; break end; {мне кажется здесь должно быть так:

if set_arr[i]<>0 then begin pusto:= false; break end;}

Хотелось бы знать это ошибка в теории или я просто не поняла лекцию?