Стандартные текстовые файлы
В любой программе считаются уже описанными и открытыми два текстовых файла, предназначенные для обмена со стандартными устройствами ввода-вывода. При вводе это файл Input, связанный с клавиатурой, при выводе – Output, – монитор.
Эти файлы рассматриваются как параметры по умолчанию в операциях работы с текстовыми файлами, когда файл явно не указан. Таким образом:
Write (CH) соответствует Write (Output,CH);
Read (CH) соответствует Read (Input,CH);
WriteLn соответствует WriteLn (Output);
ReadLn соответствует ReadLn (Input);
EOF соответствует EOF (Input);
EOLn соответствует EOLn (Input).
В соответствии с общими правилами MS-DOS стандартные файлы могут быть переназначены, то есть связаны с другими устройствами или дисковыми файлами. Для этой цели можно использовать процедуру Assign, например:
Assign (Output, ‘myfile.out’);
После этого все операции вывода, неявно использующие этот файл, будут выводить информацию на диск в текущий каталог и файл myfile.out.
При вводе и выводе числовых данных (как и других констант простых типов) в текстовый файл они представляются в литерном виде и разделяются либо произвольным количеством пробелов, либо признаком окончания строки. Перевод чисел из машинного представления в литерное и наоборот осуществляется автоматически. При чтении только числовых данных можно не анализировать конец строки, процедура Read сама осуществляет переход к другой строке. Например, вводятся исходные данные
3.51 -16 15 14
5.6 -10.2Е-3
для фрагмента программы
Var i,j,k: Integer;
r,s,t: Real;
...
Begin
Read (r,i,j,k,s,t);
...
Более сложная организация ввода потребуется, если исходные данные содержат смесь литерных и числовых данных. Например, вводится календарная дата, состоящая из дня (целое), месяца (три символа) и года (целое). Между этими тремя данными может быть произвольное количество пробелов, а может и не быть ни одного. Хотя после первого числа обязательно должен быть пробел, — как разделитель, иначе произойдет ошибка ввода.
Program Input_Date;
Var i,j: integer;
ch: char;
mch: array [1..3] of char;
Begin
Read(i);
Repeat
Read(ch);
Until ch <> ' ';
mch[1]:=ch;
Read (mch[2]);
Read (mch[3]);
Read (j);
{ Writeln (i,' ',mch,' ',j); }
end.
В данном случае нельзя целиком ввести массив mch, так как количество пробелов неопределенно.
Файлы без типа
Этот тип данных используется только в Турбо-Паскале и описывается следующим образом:
Var <имя>: File;
Понятие нетипизированных файлов используется для организации доступа к любым дисковым файлам независимо от их структуры. Файл представляется как последовательность компонентов произвольного типа, но необходимо определить размер этих компонентов.
Открываются эти файлы теми же процедурами, что и обычные, но вторым параметром должен быть задан размер компонента в байтах, например:
Assign (Fil,’Data.dat’);
Reset (Fil,512);
Если параметр отсутствует, то по умолчанию размер предполагается равным 128 байт. Для обеспечения максимальной скорости обмена размер компонента рекомендуется выбирать кратным размеру физического сектора диска, например 512 байт. С другой стороны, размер файла может быть не кратен выбранному размеру, поэтому, чтобы гарантированно обеспечить полное чтение всего файла, нужно использовать размер компонента 1.
Для организации обмена с нетипизированными файлами используются специальные процедуры, здесь не рассматриваемые.
Контрольные вопросы
1. Что такое массив?
2. Как описывается массив?
3. Что такое размер и размерность массива?
4. Чем отличается краткая от полной формы записи индексов массива?
5. Каково максимальное количество памяти, которое может занимать один массив в ОС MS DOS?
6. Как описываются строки определенной длины?
7. Какова максимальная длина строки?
8. Как наиболее просто обратиться к отдельному символу в строке?
9. Что такое «конкатенация»?
10. С помощью какой операции можно объединить две или более строки?
11. Какую функцию используют для сцепления строк, какова форма ее записи?
12. Какую функцию используют для определения длины строки, какова форма ее записи?
13. Какую функцию используют для копирования фрагмента строки, какова форма ее записи?
14. Какую функцию используют для определения номера символа в строке, с которого начинается определенная подстрока, какова форма ее записи?
15. Какую процедуру используют для вставки в исходную строку другой подстроки, какова форма ее записи?
16. Какую процедуру используют для удаления из строки ее фрагмента, какова форма ее записи?
17. Какую процедуру используют для преобразования строки символов в целое или вещественное значение, какова форма ее записи?
18. Что такое «запись»?
19. Как описывается тип «запись»?
20. Как обращаться к элементам записи?
21. Что такое «сочленяющая точка»?
22. Из каких двух частей может состоять запись?
23. Для какой цели используется оператор With?
24. Что такое «множество»?
25. Как описывается тип «множество»?
26. Какие простые типы в Турбо-Паскале можно использовать для создания множеств?
27. Как называются константы для множеств?
28. Как обозначается пустое множество?
29. Что произойдет, если при задании в конструкторе множества диапазона, первый элемент будет больше второго?
30. Что такое «объединение множеств»?
31. Что такое «пересечение множеств»?
32. Что такое «разность множеств»?
33. Что такое «включение множеств»?
34. Как обозначается и какой дает результат операция проверки принадлежности множеству?
35. Что в Паскале подразумевается пол файлом?
36. Что такое текущий указатель файла?
37. Почему в общем случае нельзя использовать имена файлов в программе такие же, как и задаваемые в операционной системе?
38. На какие 4 группы можно условно разбить все операции над файлами?
39. Как записывается процедура, ставящая в соответствие имя файловой переменной и конкретный файл?
40. Как записывается процедура, открывающая файл для просмотра?
41. Какие действия выполняются при открытии файла?
42. Как записывается процедура, открывающая файл для записи?
43. Как записывается процедура, завершающая работу с файлом?
44. Как записывается процедура, выполняющая чтение данных из файла?
45. Как записывается процедура, выполняющая запись данных в файл?
46. Как записывается и как используется функция, указывающая на конец файла?
47. Какой процедурой можно явно изменить значение указателя файла?
48. С помощью какой процедуры можно удалить все элементы файла, следующие за указателем файла?
49. С помощью какой функции можно определить количество элементов в файле?
50. С помощью какой функции можно определить значение файловой переменной?
51. С помощью какой функции можно определить результат выполнения операции ввода-вывода в файл?
52. Какое значение принимает функция IOResult при корректном выполнении операции ввода-вывода?
53. Каковы особенности текстового файла?
54. Как описываются текстовые файлы?
55. С помощью какой процедуры можно добавлять строки в конец файла?
56. С помощью какой процедуры можно читать из файла текст с начала строки?
57. С помощью какой процедуры можно записывать в файл текст с начала строки?
58. Как проверить, достигнут ли в файле конец строки?
59. Каково имя файла для стандартного устройства ввода?
60. Каково имя файла для стандартного устройства вывода?
61. Как разделяются числа в текстовом файле?
62. Зачем используются и как описываются файлы без типа?
Дата добавления: 2016-06-29; просмотров: 1980;