Обработка текстовых файлов на языке Паскаль

Автор: Пользователь скрыл имя, 08 Декабря 2010 в 13:18, курсовая работа

Описание работы

ОБРАБОТКА ТЕКСТОВЫХ ФАЙЛОВ. Процедура Assign. Процедура Reset. Процедура Rewrite. Процедура Append. Процедура Close. Процедура Erase.

Работа содержит 1 файл

обработка текстовых файлов.docx

— 48.70 Кб (Скачать)
gn="justify">    Процедура 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 всегда происходит только последовательно. Так как при считывании текущая позиция перемещается к следующему символу.

      Теперь рассмотрим как процедура Read присваивает значения различным типам данных.

      1)Символьный тип. При вводе  переменных типа Char выполняется чтение одного символа из файла и присваивание считанного значения переменной. Если перед выполнением чтения указатель достиг конца очередной строки, то результатом чтения будет символ CR (ASCII код #13) , а если достигнут конец файла, то - символ EOF ( код #26).

     2)При вводе переменных типа  String количество считанных процедурой и присвоенных строке символов равно максимальной длине строки, если только раньше не встретились символы CR и EOF. В этом случае сами символы CR и EOF в строку не помещаются. Если количество символов во входном потоке данных больше максимальной длины строки, “лишние” символы до маркера конца строки или файла отбрасываются, а новое обращение к Read возвращает пустую строку. Таким образом, процедура Read не в состоянии прочесть последовательность строк из текстового файла: строки прочитанные до маркеров конца строки или файла будут нормальными а после маркеров будут пустыми.

    3,4)При вводе числовых переменных  процедура Read вначале выделяет подстроку во входном потоке по следующем правилу: все ведущие пробелы, символы табуляции и маркеры конца строк EOLn пропускаются, после выделения первого значащего символа, наоборот, любой из перечисленных символов или EOF служат признаком конца подстроки. Выделенная таким образом подстрока затем рассматривается как символьное представление числовой константы соответствующего типа и преобразуется в численное представление, а полученное значение присваивается числовой переменной. Если в подстроке был нарушен требуемый формат представления численной константы, возникает ошибка ввода. Если при пропуске ведущих пробелов встретился символ EOF, переменная получает значение 0. В Турбо Паскале не предусмотрен ввод шестнадцатеричных констант.

     Отмечу что, ввод переменных  типа Boolean процедурами ввода не предусмотрен.

     

     Что касается стандартных текстовых  переменных, то при использовании  процедуры Read применительно к стандартному входному файлу Input, т.е. при вводе с клавиатуры, символьные строки запоминаются в буфере, который передается процедуре только после нажатия на клавишу Enter. Кроме того, при работе с файлом Input в записи оператора Read не надо писать имя файла, иначе это приведет к ошибке. Это позволяет редактировать данные при их вводе. Максимальная длина буфера ввода при работе с клавиатурой составляет 127 символов. Ввод с клавиатуры по процедуре Read сопровождается эхо-повтором вводимых символов на экране ПК.

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

       Приведем пример программы, использующей  процедуру 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 или

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;

Информация о работе Обработка текстовых файлов на языке Паскаль