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

Примечаниеот автора: Данная работа является подробным изложением теории и практики обработки текстовых файлов на языке программирования Турбо Паскаль
Загрузить архив:
Файл: ref-23405.zip (27kb [zip], Скачиваний: 138) скачать

Министерство образования Азербайджанской Республики

Бакинский Государственный Университет

Факультет: Прикладная Математика и Кибернетика

Специальность: Экономическая кибернетика

Курс: I курс

Группа: ЭК-24

КУРСОВАЯ РАБОТА НА ТЕМУ

«ОБРАБОТКА ТЕКСТОВЫХ ФАЙЛОВ НА ЯЗЫКЕ ПАСКАЛЬ»

Кафедра: Экономическая информатика

Студент: Шарифов Р. Э.

Руководитель: Зав. кафедрой проф. Пашаев Р.Т.

Баку - 2005

ОБРАБОТКА ТЕКСТОВЫХ ФАЙЛОВ

       Прежде чем перейти к обработке текстовых файлов на языке Pascal следует разобраться с понятием файл. На языке Pascal файл представляет собой упорядоченнуюпоследовательность элементов. И в отличие от общепринятого понятия файлом на языке Pascal может быть не только информация хранящиеся на дисках но и внешние  устройства (такие как: дисплей, клавиатура, принтер , любой порт ЭВМ и т.д.).

       Теперь рассмотрим причину использования файлового типа данных при разработке программ. Введение файлового типа в язык Pascal вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных. Общее свойство массива, множества и записи заключается в том, что количество их компонентов определено на этапе написания программы (то есть в исходном тексте программы), тогда как количество компонентов файла в исходном тексте программы не определяется и может быть произвольным. Это обстоятельство позволяет оперативно изменять, к примеру, входные данные независимо от программы.

      Принцип работы с файлами заключается в вводе и выводе данных. Операция ввода означает перепись данных из входного файла в основную память ЭВМ, а операция вывода это пересылка данных из основной памяти ЭВМ на выходной файл.

      Файлы расположенные на внешних устройствах часто называют физическими файлами. Их имена определяются операционной системой. В программах на языке Pascal имена файлов задаются с помощью строк. Например, имя файла на диске может иметь вид:

     ‘[имя диска]:[каталог][подкаталог]...[подкаталог][имя файла с расширением]’

    Операционная система MS-DOS ограничивает эту строку до 79 символов. Даже в одноименном модуле DOS языка Pascal имеется тип данных PathSTR = String[79], то есть строка, максимальная длина которой 79 символов. Если же файл находится в том же каталоге, что и программа то имя файла можно указать короче : ‘[имя файла с расширением]’. Также именами файлов могут быть и имена внешних устройств:

     ‘CON’,   'LPT1',   ‘LPT2’,   ‘LPT3’,   'PRN','COM1','AUX',  'NUL'.

     Отмечу что, здесь CON – совокупность устройств ввода-вывода, где устройство ввода клавиатура, а устройство вывода дисплей; 'LPT1',   ‘LPT2’,   ‘LPT3’ – последовательность устройств для печати и ‘LPT1’ синонимичен с 'PRN' и является обыкновенным принтером; 'COM1' – это последовательный порт ЭВМ и т.д.

     С файловой системой в Turbo Pascal связано понятие буфера ввода - вывода. Ввод и вывод данных осуществляется через буфер. Буфер - это область в памяти, которая выделяется для каждого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь объем буфера не будет заполнен. Только после этого или после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем данных считывается не столько, сколько запрашивается, а сколько поместится в буфер. Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами.

     Теперь перейдем к переменным файлового типа. Язык Pascal поддерживает 3 файловых типа:

      -1-ый – текстовые файлы.

     -2-ой – типизированные файлы.

     -3-ий – нетипизированные файлы.

     Описание переменных к этим трем файловым типам данных выглядит следующим образом:

     -для текстовых файлов : Var T:Text; {T-файловая переменная текстового типа}

     -для типизированных файлов : Var F:File of тип_данных; {F-типизированная файловая переменная; тип_данных – любой тип данных языка Pascal кроме файлового типа}

     -для нетипизированных файлов : Var F:File; {F-нетипизированная файловая переменная}

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

    Особое место на языке Pascal занимают текстовые файлы, которые являются темой настоящей курсовой работы. Текстовый файл представляет собой линейную последовательность символов, организованных в строки переменной длины.

     В конце строк стоит признак конца строки EOln (в операционной системе MS-DOS, а как следствие и в её оболочке MS-Windows End Of Line состоит из двух символов: LF- перевод строки , имеющий порядковый номер в ASCII таблице #10 и CR - возврат каретки c порядковым номером в ASCII таблице #13). В самом конце текстового файля стоит признак конца файла EOF (End Of File имеющий порядковый номер в ASCII таблице -#26). Признак конца строки вводится при помощи нажатия клавиши Enter, а признак конца файла при помощи нажатия клавиш Ctrl+Z. Обычно эти специальные символы или признаки не отображаются в текстовых редакторах.

     В текстовом файле всегда имеется так называемый курсор или указатель который стоит на определенном символе. Если файл пустой то первым и единственным считанным символом будет EOF (#26).

     Помимо текстовых переменных вводимых программистом но языке Pascal имеются также стандартные файловые переменные текстового типа: Input и Output. Стандартная текстовая переменная Input представляет собой доступный только для чтения файл, связанный со стандартным файлом ввода операционной системы. Стандартная текстовая переменная Output – это доступный только для записи файл, связанный со стандартным файлом вывода. Обычно стандартным файлом ввода-вывода является внешнее устройство – Консоль (‘CON’) о котором уже говорилось выше.

      В чем же суть обработки текстовых файлов? Учитывая специфику слова “обработка”, под обработкой текстовых файлов можно понять считывание информации со входного файла, изменение информации и записи этой информации на выходной файл. Запись не читанных со входного файла текстовых данных на выходной файл является видоизменением текстового файла, но не подпадает под понятие обработка текстового файла.

     Теперь самое время перейти к стандартным функциям и процедурам, которые Pascal предоставляет нам для работы с текстовыми файлами и в некоторых случаях с файлами вообще.

      Процедура Assign([файловая переменная],[имя файла]);

      Для работы с файлами вторым важным действием после объявления файловой переменной является “связывание” этой переменной с физическим файлом. Это действие и выполняет процедура Assign.То есть выполняя действия над файловой переменной программа, ассоциирующая файловую переменную с конкретным физическим файлом, производит операции именно над этим физическим файлом. Как было отмечено процедура Assign является обязательной для работы с файлами. С одним и тем же физическим файлом можно связать несколько файловых переменных. Также с одной файловой переменной можно последовательно связать различные физические файлы. Причём при последовательном связывании с одной и той же переменной различных физических файлов операции произведённые над переменной до связывания становятся недействительными. Например следует дважды открыть одну и ту же переменную дважды связанную с различными файлами для чтения: Assign(T,’file1.txt); Reset(T); Assign(T,’file2.txt’); Reset(T);. О процедурах открытия файлов будет говориться ниже.

     Что касается стандартных входных и выходных текстовых файлов Input и Output то они автоматически связываются со стандартным устройством ввода-вывода (обычно это совокупность устройств – дисплей и клавиатура). То есть два оператора Assign(Input,’CON’); Assign(Output,’CON’); выполняются по умолчанию и их не следует писать.

    Приведём пример программы использующей процедуру Assign:

Program Assign_my_file;

VarT:Text; {Описание текстовой переменной}

Begin

Assign(T,’my_file.txt’); {Сопоставление внешнему текстовому файлу my_file.txt текстовой переменной T}

End.

Процедура Assign работает со всеми типами файлов.

   

    Процедура Reset ([файловая переменная]);

   Открывает логический файл (то есть файловая переменная связанная с физическим файлом) для чтения. Естественно, что для чтения следует открывать входной файл. После выполнения процедуры Reset курсор ставится на первый элемент файла (в случае текстового файла на первый символ) и с файла уже можно считывать информацию. Если текстовый файл пустой, то первым символом будет EOF - #26.

    Приведём пример программы использующей процедуру Reset:

ProgramReset_my_file;

Var T:Text;

Begin

Assign(T,’my_file.txt’);

Reset(T); {Открытие файла для чтения}

End.

Что касается стандартного входного текстового файла Input то он открывается для чтения автоматически. То есть не следует писать Reset(Input); в программе.

  Процедура Rewrite([файловая переменная]);

    Создает и открывает внешний физический файл связанный с файловой переменной для последующей записи в него. Новый созданный файл бывает пустой и курсор становится в самое начало файла. Если описанный в процедуре Assign внешний файл уже существует, то он стирается и создаётся заново. Разумеется после выполнения процедуры Rewrite созданный для записи файл является выходным файлом. Процедура Rewrite используется со всеми файловыми типами данных.  

     Приведём пример программы использующей процедуру Rewrite:

Program Rewrite_my_file;

Var T:Text;

Begin

Assign(T,’my_file.txt’);

Rewrite(T); {создаёт новый файл my_file.txt для последующей записи в него}

End.

Что касается стандартного выходного текстового файла Output то он открывается для записи автоматически. То есть не следует писать Rewrite(Output); в программе.

   Процедура Append([файловая переменная]);

     Открывает внешний физический текстовый файл связанный с файловой переменной для последующей записи в него. Однако в отличии от процедуры Rewrite этот файл существует запись производится в самый конец файла. Разумеется процедура Append используется для открытия выходных текстовых файлов. После открытия файла курсор становится в самый конец файла. Процедура Append используется только для текстовых файлов.

     Приведём пример программы использующей процедуру Append:

Program Append_my_file;

Var T:Text;

Begin

Assign(T,’my_file.txt’);

Append(T); {Открывает логический файл для последующей записи информации в самый конец}

End.

    Процедура 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;

Var F:String; {Фамилия}

       D:Word;  {Дата рождения}

      T:Text;

Begin

       Assign(T,’my_file.txt’);

       Rewrite(T);

       F:=’Sharifov      ‘;

       D:=1987;

       Write(T,F,’Rustam        ‘);

       Write(T,D);

       Close(T);

End.

    

Процедура WriteLn([файловая переменная],[список вывода]);

        Эта процедура полностью идентична процедуре WRITE за исключением того, что выводимая в текстовый файл строка символов завершается признаком конца строки EOLn.

       

WriteLn используется только для текстовых файлов. При вызове

WriteLn можно опускать параметр список вывода, в этом случае в файл передается  признак конца строки, что при выводе на экранприведет к переводу курсора в начало следующей строки.

   Приведём пример программы, использующей процедуру Write:

Program Write_into_my_file;

Var F:String; {Фамилия}

       D:Word;  {Датарождения}

      T:Text;

Begin

       Assign(T,’my_file.txt’);

       Rewrite(T);

       F:=’Sharifov      ‘;

       D:=1987;

       WriteLn(T,F,’Rustam        ‘);

       WriteLn(T,D);

       Close(T);

End.

                      Функция EOLn([файловая переменная]);

        Это логическая функция, то есть возвращает значения TRUE или FALSE. Возвращает значение True, если на входном текстовом файле  указательдостиг маркера конца строки. Иначе принимает значение False.

       

      Если параметр [файловая переменная] опущен, функция проверяет стандартный файл Input.

       

        Приведем пример программы использующей функцию EOLn:

Допустим нам дан входной текстовый файл In состоящий только из символьного типа данных Char. Нам надо записать в выходной текстовый файл Out только первую строку из входного файла.   

Program End_Of_Line;

Var

    In,Out:Text;

    C:Char;

Begin

     Assign(In,’indata.txt’);

     Assign(Out,’outdata.txt’);

     Reset(In);

     Rewrite(Out);

     Repeat

       Read(In,C);

       Write(Out,C);

     UntilEOLn; {Пока курсор не достигнет первого маркера конца строки будет производиться считывание и запись}

End.

                         Функция EOF([файловая переменная]);

        Проверяет является ли текущая позиция файла концом файла. EOF возвращает TRUE, если следующим считанным символом из файла или если файл пуст будет признак конца файла. В противном случае функция EOF возвращает FALSE.

Если параметр [файловая переменная] опущен то функция проверяет стандартный файл Input.

     

С помощью этой функции можно с легкостью считать всю информацию из файла.

       Приведем пример программы использующей функцию EOF:

Допустим нам дан входной текстовый файл In состоящий только из символьного типа данных Char. Нам надо записать в выходной текстовый файл Out все символы из входного файла.   

Program End_Of_Line;

Var

    In,Out:Text;

    C:Char;

Begin

     Assign(In,’indata.txt’);

     Assign(Out,’outdata.txt’);

     Reset(In);

     Rewrite(Out);

     Repeat

       Read(In,C);

       Write(Out,C);

     UntilEOF; {Пока курсор не достигнет конца файла будет производиться считывание и запись}

End.

                Функция SeekEOLn([файловая переменная]);

  

        Пропускает все пробелы и знаки табуляции до маркераконца строки ЕОLn  или до первого значащего символа и возвращает TRUE  если маркер обнаружен. Т.е. функция  проверяет есть лизначащие символы до конца строки и принимает значение FALSE если они есть.

       

       Если параметр [файловая переменная] опущен, функция проверяет стандартный файлINPUT.

       

        Приведём пример программы использующей функцию EOLn:

Допустим нам дана строка во входном текстовом файле In:

‘1 2 3 4 5         ‘

(Без кавычек, после 5 стоят ненужные пробелы)      

Program Seek_End_Of_line;

Var

s:array[1..5] of byte;

i:integer;

f:text;

Begin

   assign(f,'temp.txt');

   reset(f);

   i:=0;

   repeat

     inc(i);

     read(f,s[i]);        {когда считается 5-ка цикл остановится так как нет значящих символов}

   until seekeoln(f);

End.

                  

               Функция SeekEOF([файловая переменная]);

         Логическая функция. Пропускает все пробелы, знаки табуляции и маркеры конца строки EOLnдо маркера конца файла или до первого значащего символа и возвращает TRUE,если маркер обнаружен. В противном случае FALSE. То есть с помощью этой функции можно проверить есть лизначащие символы до конца строки.

        Если параметр [файловая переменная] опущен, функция проверяет стандартный файл  INPUT.

        Процедура Flush([файловая переменная]);

       

        Сбрасывает буфер текстового файла, связанного с файловой переменной и открытого для вывода процедурой Rewriteили Append. Это даёт гарантию того , что вся информация, записываемая в файл, будет сохранена во внешнем физическом файле.

       

Процедура не влияет на файлы открытые для ввода.

Процедура SetTextBuf([файловая переменная],[новый размер буфера]);

       Назначает буфер ввода-вывода для текстового файла, связанного с файловой переменной. [новый размер буфера] – это переменная типа Word.

       

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

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

        Ниже будут приведены примеры программ обрабатывающих текстовый файл.

1) Дан входной файл In состоящий из текста на русском языке. В тексте точки встречаются только в конце предложения. Нужно перевести все повествовательные предложения оканчивающиеся точкой в восклицательные. Результат записать в выходной файл.

  

Program vosklicateliy_znak;

Var

   C:Char;

   Indata,Out:Text;

Begin

   Assign(Indata,’indata.txt’);          {Связываем }

   Assign(Out,’outdata.txt’);       { файлы}

   Reset(Indata);              {Открываем}

   Rewrite(Out);{файлы}        

   While not EOF(Indata) do

     Begin

     Read(Indata,C);  {Считываем один символ}

     IfC=’.’ thenC:=’!’;{Если символ точка, то присваиваем символьной переменной значение ‘!’ то есть восклицательный знак}

     Write(Out,C); {Записываем символ в выходной файл}

     End;

   Close(Out);

End.

2)Дан входной файл Inкоторый содержит параметры матрицы A в первой строке а на следующих строках саму матрицу. Параметры n<=25 и m<=25. n- количество строк матрицы, m- количество столбцов. Пример файла In:

3 3

1 2 3

4 5 6

7 8 9

В выходной файл Outследует записать транспонированную матрицу A.

             

Program Transpor_A;

Var

A:Array[1..25,1..25] of integer;

Temp:Integer; {Переменная для обмена элементов матрицы}

n,m,i,j:byte;

Indata,Out:Text;

Begin

Assign(Indata,’indata.txt’);          {Связываем }

Assign(Out,’outdata.txt’);       { файлы}

Reset(Indata);              {Открываем}

Rewrite(Out);{файлы}         

Read(In,n,m);

ReadLn(In); {Следующее считывание будет происходить с новой строки}  

For i:=1 to n do

   Begin

     For j:=1 to m do

       Read(Indata,a[i,j]); {Считываниеданных}

     ReadLn(Indata);

   End;

For i:=1 to n do

    For j:=i+1 to m do

      Begin

       Temp:=a[i,j];

       a[i,j]:=a[j,i];

       a[j,i]:=Temp;

      End;

For i:=1 to m do

    Begin

     For j:=1 to n do

       Write(Out,a[i,j],’ ‘);

     WriteLn(Out);

    End;

Close(Out);

End.

     

     

Использованная литература:

1) “TurboPascal 7.0 . Начальный курс” Фаронов В.В.

2) “Turbo Pascal. Программирование на языке высокого уровня” Немнюгин С.А.

3) “Лекции по программированию на Паскале”

4) “Руководство по языку B.Pascal 7 & Objects/LR, Глава 14, Ввод и вывод” www.citforum.ru