Автор: Пользователь скрыл имя, 02 Ноября 2011 в 19:32, курсовая работа
Прежде чем перейти к обработке текстовых файлов на языке Pascal следует разобраться с понятием файл. На языке Pascal файл представляет собой упорядоченную последовательность элементов. И в отличие от общепринятого понятия файлом на языке Pascal может быть не только информация хранящиеся на дисках но и внешние устройства (такие как: дисплей, клавиатура, принтер , любой порт ЭВМ и т.д.).
Процедура Close([файловая переменная]);
Сохраняет и закрывает открытый физический файл связанный с файловой переменной. Как было отмечено в определении файл перед закрытием должен быть открыт (процедурами Reset или Rewrite для всех типов файлов или процедурой Append для текстовых файлов). Если в выходных файлах были произведены изменения, то для сохранения информации они должны быть обязательно закрыты процедурой Close. Процедура Close может быть использована для любых типов файлов. Если последовательно открывать файл различными процедурами, то в промежутках между этими процедурами оператор Close автоматически. То есть если в начале открыть файл для записи процедурой Rewrite а затем сразу открыть его для чтения процедурой Reset, то до процедуры Reset автоматически произойдёт сохранение и закрытие файла оператором Close.
Приведём пример программы использующей процедуру Close:
Program Close_my_file;
Var T:Text;
Begin
Assign(T,’my_file.txt’);
Append(T);
Close(T); {Сохраняем и закрываем текстовый файл T открытый процедурой Append}
End.
Процедура Erase([файловая переменная]);
Процедура Erase удаляет физический файл
связанный с файловой переменной. Физический
файл связанный с файловой переменной
должен существовать, иначе при попытке
удалить несуществующий файл процедурой
Erase произойдёт ошибка времени.
Приведём пример программы
использующей процедуру Erase:
Program Erase_my_file;
Var T:Text;
Begin
Assign(T,’my_file.txt’);
Rewrite(T);
Erase(T); {Удаляем
файл my_file.txt}
End.
Процедура Read([файловая переменная],[список ввода]);
Присваивает одно или несколько значений из файла связанного с файловой переменной в одну или несколько переменных, описанных в списке ввода. В списке ввода могут быть одна переменная или перечислены несколько переменных через запятую. Переменные для ввода из текстового файла могут быть следующих типов:
-Символьный тип данных (Char).
-Строковой тип данных (String).
-Целочисленный тип данных (Integer, LongInt, Word, Byte).
-Переменные вещественного типа (Real, Single,
Double, Complex, Extended).
Считывание информации из входного файла процедурой Read всегда происходит только последовательно. Так как при считывании текущая позиция перемещается к следующему символу.
Теперь рассмотрим как
1)Символьный тип. При вводе переменных типа Char выполняется чтение одного символа из файла и присваивание считанного значения переменной. Если перед выполнением чтения указатель достиг конца очередной строки, то результатом чтения будет символ CR (ASCII код #13) , а если достигнут конец файла, то - символ EOF ( код #26).
2)При вводе переменных типа String количество считанных процедурой и присвоенных строке символов равно максимальной длине строки, если только раньше не встретились символы CR и EOF. В этом случае сами символы CR и EOF в строку не помещаются. Если количество символов во входном потоке данных больше максимальной длины строки, “лишние” символы до маркера конца строки или файла отбрасываются, а новое обращение к Read возвращает пустую строку. Таким образом, процедура Read не в состоянии прочесть последовательность строк из текстового файла: строки прочитанные до маркеров конца строки или файла будут нормальными а после маркеров будут пустыми.
3,4)При вводе числовых
Отмечу что, ввод переменных типа Boolean процедурами ввода не предусмотрен.
Что касается стандартных
Процедура Read прекрасно приспособлена вводу чисел. При обращении к ней за вводом очередного целого или вещественного числа процедура «перескакивает» маркеры конца строк, т.е. фактически весь файл рассматривается ею как одна длинная строка, содержащая текстовое представление чисел.
Приведем пример программы,
Допустим
нам дан входной файл my_file.txt следующего
вида:
Sharifov
Rustam 1987
Program Read_from_file;
Var
F,I:string[15]; {Переменная F – фамилия, I – имя. Во входном файле фамилия и имя последовательно расположены на 15 позициях, то есть на них выделено 15 позиций}
D:word; {Переменная D – год рождения. Год рождения расположен сразу после имени}
T:Text;
Begin
Assign(T,’my_file.txt’);
Reset(T);
Read(T,F,I,D); {Из входного файла Т считываются данные и присваиваются переменным.}
End.
Процедура ReadLn([файловая переменная],[список ввода]);
Это процедура идентична
Read начинается с первого символа новой строки. Кроме этого, эту процедуру можно вызывать без параметра [список ввода], что приведет к пропуску всех символов текущей строки вплоть до Eoln. Процедура ReadLn используется только с текстовыми файлами.
Если процедура используется для
чтения с клавиатуры (Input), нажатие на клавишу
Enter отобразится на экране как последовательность
CR + LF и курсор будет помещен в начало следующей
строки. В то время как в процедуре Read
эхо-повтором клавишы Enter является символ
CR.
Допустим нам дан входной файл
my_file.txt следующего вида:
Sharifov
Rustam
1987
Program Read_from_file;
Var
F,I:string[15];
D:word;
T:Text;
Begin
Assign(T,’my_file.txt’);
Reset(T);
ReadLn(T,F,I,D); {Данные во входном файле соответсвующие переменных расположены в новых строках. Процедура каждый раз считывает данные из новой строки и перемещает курсор за признак конца строки EOLn }
End.
Процедура
Write([файловая переменная],[список
вывода]);
Обеспечивает вывод информации в текстовый файл или передачу её на логическое устройство. Файловая переменная должна быть связана с внешним файлом для вывода информации. Если файловая переменная отсутствует, то подразумевается вывод информации на стандартное устройство вывода (дисплей ПК). Здесь [список вывода]: последовательность из одного или более выражений типа:
-Символьный тип (Char)
-Строковой тип (String)
-Целые числа
-Вещественные числа
-Булевые константы (Boolean)
Элементы списка вывода разделяются друг от друга запятой.Любой элемент списка вывода может иметь вид:
Выводимое_выражение[:ширина поля[:кол-во десятичных знаков]]
[ширина поля] и [количество десятичных знаков] – это выражения типа Word. Квадратные скобки означают возможность отсутствия заключенных в них параметров. Подпараметр [ширина поля], если он присутствует, указывает минимальную ширину поля, в которое будет записываться символьное представление выводимого значения. Именно символьное представление, так как все данные перечисленные в списке вывода переводиться в символьный тип и только после этого записываются в текстовый файл. Если символьное представление имеет меньшую длину, чем [ширина поля], то оно будет дополнено слева пробелами, если - большую длину, то подпараметр [ширина поля] игнорируется и выводится необходимое число символов.
Подпараметр [количество десятичных знаков] задает количество десятичных знаков в дробной части вещественного числа. Он может использоваться только совместно с [ширина поля] и только по отношению к выводимому выражения одного из вещественных типов.
Если ширина поля вывода не указана, соответсвующий элемент вывода выводится вслед за предыдущим без какого-либо их разделения.
Символы и строки передаются
выходному файлу без изменений,
При выводе булевых переменных в зависимости от их значения выводятся строки TRUE или FALSE.
Вещественные числа выводятся
в так называемом
_s#.##############E*#### , где
_ - пробел;
s - пробел для положительного и знак “-” для отрицательного числа;
# - десятичная цифр;
E - символ десятичного основания;
* - знак “+” или “-” в зависимости от знака десятичного порядка цифр;
Если подпараметр ширина поля для вещественных чисел опущен,
принимается его значение по умолчанию (23) .
Если подпараметр количество десятичных знаков равен нулю, ни дробная часть числа, ни десятичная точка не выводится. При отрицательном значении этого параметра он игнорируется и число выводится в экспоненциальном формате с учетом ширины поля.
Если значение подпараметра
При заполнении стандартного текстового файла его содержимое сдвигается вверх на одну строку.
Приведём пример программы, использующей
процедуру Write:
Program Write_into_my_file;
Var F:String; {Фамилия}
Информация о работе Обработка текстовых файлов на языке Паскаль