Что значит формат txt. Реферат: Текстовые файлы. Редакторы текстовых файлов. Изменение расширений текстовых файлов

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

TXT

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

RTF

Расширенный текстовый формат (Rich Text Format) был разработан компанией Microsoft как универсальный кросс-платформенный формат для хранения текстовой информации. Сохраняет данные форматирования, позволяет производить вставку дополнительных объектов:

  • Формул;
  • Таблиц;
  • Сносок и др.

Основная «фишка» rtf-формата – использование специальных «управляющих» слов, выделенных спецсимволами, что приводит к значительному увеличению объема файла.

DOC

Формат *.doc также разработан корпорацией Microsoft и использовался в текстовом редакторе . Если быть точным, то doc-файлы на самом деле бинарные, их можно открыть в большинстве современных текстовых редакторов. Имеют возможности сохранения форматирования, стилевого оформления, вложения картинок и других объектов в текст, а также поддержку гиперссылок.

DOCX

Усовершенствованный и лицензированный формат от Microsoft, появившийся впервые с пакетом Office 2007. Представляет собой следующий этап формата *.doc.

HTML

Достаточно популярны сейчас форматы, основанные на Hyper Text Markup Language (HTML) – HTM, CHM, MHT и др. Язык HTML был разработан специально для создания веб-страниц, но благодаря своей универсальности, удобству и небольшому размеру стал широко использоваться для хранения текстовых данных. Любой HTML-документ можно прочитать с помощью стандартных инструментов операционной системы, без использования сторонних программ.

PDF

Формат разработан компанией Adobe специально для нужд полиграфии. Впоследствии пользователи оценили удобство использования pdf-файлов, и этот формат стал стандартом для обмена документами.

ODT

Те́кстовый файл - компьютерный файл , содержащий текстовые данные . Текстовым файлам противопоставляются двоичные (бинарные) файлы , в которых содержатся данные, не рассчитанные на интерпретацию в качестве текстовых (например, файлы, хранящие текст в закодированном или сжатом виде, или хранящие не текст, а звук, изображение или иные данные).

Преимущества и недостатки

Преимущества:

  • Универсальность - текстовый файл может быть прочитан (так или иначе) на любой системе или ОС , особенно если речь идёт об однобайтных кодировках вроде ASCII , которые не подвержены проблеме, характерной для других форматов файлов - для них не важна разница в порядке байтов или длине машинного слова на разных платформах .
  • Устойчивость - каждое слово и символ в таком файле самодостаточны и, если случится повреждение байтов в таком файле, то обычно можно восстановить данные или продолжить обработку остального содержимого, в то время как у сжатых или двоичных файлов повреждение нескольких байтов может сделать файл совершенно невосстановимым. Многие системы управления версиями рассчитаны на текстовые файлы и с двоичными файлами могут работать только как с единым целым.
  • Формат текстового файла крайне прост и его можно изменять текстовым редактором - программой, входящей в комплект практически любой ОС .

Недостатки:

  • У больших несжатых текстовых файлов низкая информационная энтропия - эти файлы занимают больше места, нежели минимально необходимо. Хотя эта избыточность и определяет повышенную устойчивость к сбоям в каналах передачи данных и при получении данных с носителей , например, с магнитной ленты .
  • Некоторые операции с текстовыми файлами неэффективны. Например, если в файле встретится число, вычислительная система до начала операций с ним должна будет перевести его в свой внутренний формат, применив сравнительно сложную процедуру конвертации числа; чтобы перейти на 1000-ю строку, требуется считать 999 строк, идущих до неё; сложно заменить одну строку другой и т. д. Поэтому при работе с большими объёмами данных текстовые файлы применяют только как промежуточный формат, обеспечивающий интероперабельность .

Форматы, основанные на текстовых файлах

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

Текстовый формат служит основой для многих более специализированных форматов (например, .ini , SGML , HTML , XML , TeX , исходных текстов языков программирования). В некоторых из таких форматов определённые сочетания символов могут использоваться как средства разметки текста. В таком случае файл может хранить форматированный текст, в котором для символов дополнительно может быть задан шрифт, начертание, размер и т. п. (например, Rich Text Format , HTML).

Расширения имён файлов

В DOS и Windows для файлов с неформатированным текстом обычно используется расширение .txt . Тем не менее, текстовыми могут являться файлы с любым другим расширением или без оного. Например, исходные коды программ обычно хранятся в файлах с расширениями, соответствующими языку программирования , на котором написаны программы (.bas , .pas , .c).

Форматированный текст (текст с разметкой) обычно хранится в файлах с расширением, соответствующим формату или языку разметки - .rtf , .htm , .html .

Кодировки

8-битный текст

Исторически для кодирования текстовых файлов применялись 7-битный набор символов ASCII , а также 8-битные EBCDIC и различные расширения ASCII. В 8-битных кодовых страницах общепринято использовать в первой половине кодовой таблицы символы, соответствующие ASCII.

Преимуществом 8-битного представления текста является программная простота и независимость от проблемы порядка байтов или длины машинного слова на разных платформах. Недостаток - большое количество различных стандартов, что может приводить к несовместимости .). Иногда в начало файла добавляют специальный символ-маркер (U+FEFF

Такой разнобой продиктован принципами работы пишущих машинок: чтобы перейти на новую строку, надо вернуть каретку в начало строки (carriage return ), а затем провернуть барабан на одну строку (line feed ). При печати на принтере тот и другой символ мог стоять обособленно (например, чтобы выделить строку, пропечатав её дважды, или прокрутить барабан на несколько строк), но в текстовых файлах в этом нет нужды.

Помимо названных, в текстовых файлах встречаются такие символы, как табуляция (код 9) и перевод страницы (код 0xC). Последний использовался старыми текстовыми редакторами наподобие ЛЕКСИКОН , а также в файлах, предназначенных для распечатки на принтере.

ТЕМА №10: ФАЙЛЫ. ТИПИЗИРОВАННЫЕ ФАЙЛЫ. ТЕКСТОВЫЕ ФАЙЛЫ.

Основные понятия

Файлы – это поименованная структура данных на техническом носителе, представляющая собой последовательность элементов (записей) одного типа.

Файлы – это массив переменной длины неограниченного размера.

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

Отличие файла от массива:

А) размещение на внешнем носителе;

Б) длина файла не задается;

В) место элемента не определяется индексом.

Для обозначения файла и работе с ним используется файловая переменная (ФП).

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


Особенности файловой переменной:

Ей нельзя присваивать какие-либо значения

Она не может участвовать в логических операциях

Она не может входить в математические выражения

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

Файл объявляется в разделе описания переменных с указанием типа элементов файла.

Тип файла

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

Типизированный

Var F1: file of integer;

F2: file of char;

Не типизированный

Текстовый

РАБОТА С ФАЙЛОМ

А) ЗАПИСЬ В ФАЙЛ

Assign(ФП, ‘Name’);

Открываем файл для записи

Записываем данные в файл

Write(ФП, Данные);

Writeln(ФП, Данные); - для текстовых

Закрываем файл

Б) ЧТЕНИЕ ИЗ ФАЙЛА

Связываем файл (можно не существующий) с именем Name с файловой переменной (ФП)

Assign(ФП, ‘Name’);

Открываем файл для чтения (указатель устанавливается на первый элемент)

Читаем данные из файла в переменные и передвигаем указатель файла вперёд.

Read(ФП, Переменные);

Readln(ФП, Переменные); - для текстовых

Закрываем файл

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

ОПРЕДЕЛЕНИЕ ДЛИНЫ ТЕКСТОВЫХ ФАЙЛОВ

В Паскале нет команды, которая бы определяла количество строк, записанных в текстовый файл. Однако есть функция, которая подсказывает момент, когда указатель файла достиг последней строки - EOF (End Of File)

EOF (ФП) – функция подтверждающая

достижение конца текстового файла

Если конец файла достигнут, то EOF (ФП) равняется true.

Если конец файла не достигнут, то EOF (ФП) равняется false.

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

Var f: text; N:integer; s:string;

Assign (f, ‘c:\MyText. txt’);

While Eof(f)=false do { можно записать эту строчку короче: While not Eof(f) do }

Writeln ("В файле c:\MyText. txt ", N, " строк");

ОПРЕДЕЛЕНИЕ ДЛИНЫ ДВОИЧНОГО ФАЙЛА

Для двоичных типизированных файлов применим способ, который используется при чтении текстовых файлов. Функция EOF работает одинаково и для текстовых и для двоичных фалов.

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

FileSize (ФП) – функция, возвращающая длину двоичного файла

Программа, читающая все числа из двоичного целочисленного файла и находящая их сумму:

Var f: file of integer;

Summ, i, T:integer;

Assign (f, ‘c:\MyFile. int’);

For i:=1 to Filesize(f) do { можно использовать другой цикл: While not Eof(f) do }

Writeln ("Сумма чисел, в файле c:\MyFile. int равна ", Summ);

Writeln ("Длина файла c:\MyFile. int ", FileSize(f), " чисел");

ПЕРЕМЕЩЕНИЕ ПО ДВОИЧНОМУ ФАЙЛУ

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

SEEK (ФП, Позиция) – перемещает указатель

в заданную позицию файла

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

Var f: file of real; {объявляем файловую переменную для вещественного файла}

N:= FileSize(f); {определим количество чисел в файле}

Repeat {начало цикла}

Writeln("В файле ‘, N, ‘ чисел’);

Writeln("Введите номер числа, которое надо перенести в конец файла?’);

Until (Poz>=0) and (Poz<=N) {выход из цикла, только если в данном файле такая позиция существует}

Seek(f, Poz); {позиционируем указатель файла на заданную позицию}

Read(f, R); {читаем число из заданной позиции файла в переменную R, указатель перемещается на одну позицию вперёд}

Seek(f, Poz); {возвращаем указатель в заданную позицию}

Write(f, Null); {обнуляем число в котором установлен указатель}

Seek(f, N); {перемещаем указатель в конец файла}

Write(f, R); {записываем число из переменной R в конец файла}

УМЕНЬШЕНИЕ ДВОИЧНЫХ ФАЙЛОВ

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

Truncate (ФП ) процедура, отсекающая данные, расположенные после указателя файла

Программа, оставляющая в двоичном файле только первые 10 чисел :

Var f: file of real; {объявляем файловую переменную}

Assign (f, ‘c:\MyRealFile. rlf’); {связываем файловую переменную с файлом}

Reset (f); {открываем файл для чтения и записи}

Seek(f, 10); {позиционируем указатель файла на заданную позицию}

Truncate (f); {отсекаем от файла всё, что расположено дальше указателя файла}

ДОБАВЛЕНИЕ ИНФОРМАЦИИ В ТЕКСТОВЫЕ ФАЙЛЫ

К сожалению, не существует возможности при работе с текстовыми файлами вставлять какую-либо информацию в середину или в начало файла. Единственное изменение файла, которое возможно – это возможность дописать строчки в конец файла. Для этого, файл должен быть открыт к добавлению.

A ppend (ФП) – процедура, открывающая текстовый файл

для добавления строк

Программа, дописывающая в конец текстового файла две строки:

Var FT: text; s: string;

Assign (FT, ‘q. txt’);

S:=’Первая добавленная строка’; Writeln (FT, S);

S:=’Вторая добавленная строка’; Writeln (FT, S);

ПЕРЕИМЕНОВАНИЕ, ПЕРЕНОС ФАЙЛА

При работе с размещением информации на диске следует знать, что при переносе информации из одной папки (в отличии от копирования, где создаётся дубликат данных) в другую фактического переноса данных нет. При переносе информации из одной папки в другую происходит лишь смена пути в файле, то есть, по сути, меняется лишь название файла.

Поэтому в Паскале одна и та же команда осуществляет и переименование файла, и перенос файла между каталогами.

ReName (ФП , Новое_название_файла) процедура, переименовывающая файл и переносящая его в каталог,

указанный в Новом названии файла.

Команда Rename работает только с закрытыми (или ещё не открытыми) файлами. Поэтому перед её применением не надо открывать файл для чтения, записи или добавления данных. Либо, если файл уже открыт его следует предварительно закрыть.

Программа, должна дать файлу ‘q1.txt’ новое имя, которое введёт пользователь, и перенести файл ‘ q 2. txt ’ в каталог ‘ c :\ Document \’.

Var FT: text; s: string;

Assign (FT, ‘q1.txt’); { связываем файловую переменную с файлом }

Writeln (‘Введите новое имя для файла q1.txt’);

Readln(s); { читаем с клавиатуры новое имя файла в переменную s}

Rename (FT, s); { переименовываем файл}

Assign (FT, ‘q2.txt’); { связываем файловую переменную со вторым файлом }

Rename (FT, ‘c:\Document\q2.txt’); { переносим файл в заданный каталог с тем же именем}

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

КОПИРОВАНИЕ И УДАЛЕНИЕ ФАЙЛА

Копирование : Чтобы скопировать файл необходимо прочитать все записи одного файла и записать их во вновь созданный файл.

Удаление: Чтобы удалить файл достаточно применить к файловой переменной (связанной с закрытым файлом) процедуру Erase.

ERASE (ФП ) процедура, удаляющая файл, связанный с файловой переменной.

Программа копирует файл с диска "C" на ди c к ‘ D ’и удаляет оригинал с диска "C" (фактически программа переносит файл с одного диска на другой)

Var f1, f2: file of byte;

Assign (f1, ‘c:\MyFile. int’); Reset (f1); {открываем для чтения файл образец}

Assign (f2, ‘d:\MyFile. int’); Rewrite (f2); {создаём файл на диске D}

While not Eof(f1) do

Read (f1, b); {читаем данные из файла оригинала}

Write (f2, b); {записываем данные в новый фал}

Close (f1); {закрываем файла образец, перед удалением файл должен быть обязательно удалён}

Close (f2); {закрываем новый файл}

Erase (f1); {удаляем файл}

РАБОТА С КАТАЛОГАМИ

MkDir (Имя каталога) – процедура создаёт новый каталог

(Если каталог с таким именем существует, то возникнет ошибка)

RmDir (Имя каталога) – процедура удаляет каталог

(Удалить можно только пустой каталог)

ChDir (Имя каталога) – процедура изменяет текущий каталог

(Текущий каталог – это каталог, путь к которому не обязательно указывать при работе с файлами. При включении программы, текущим каталогом является каталог, в котором находится программа.)

Для переименования каталога необходимо:

а) Создать новый каталог

б) Перенести туда все файлы

в) Удалить старый каталог

Программа переименовывает каталог "c:\Cat\", в котором расположено два файла "q1.txt" и "q2.ini", в каталог "c:\CatNew\’ и делает каталог текущим.

Var f1,f2: file of byte; b:byte;

MkDir("c:\CatNew"); {создаём новый каталог}

{копируем в новый каталок файл q1.txt}

Assign (f1, ‘c:\Cat\q1.txt’); Reset (f1);

Assign (f2, ‘c:\CatNew\q1.txt’); Rewrite (f2);

While not Eof(f1) do

Begin Read (f1, b); Write (f2, b); End;

{копируем в новый каталок файл q2.ini}

Assign (f1, ‘c:\Cat\q2.ini’); Reset (f1);

Assign (f2, ‘c:\CatNew\q2.ini’); Rewrite (f2);

While not Eof(f1) do

Begin Read (f1, b); Write (f2, b); End;

Close (f1); Close (f2); Erase (f1);

RmDir (‘c:\Cat’); {удаляем старый каталог}

ChDir (‘c:\CatNew’); {делаем новый каталог текущим}

Поиск файлов

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

Для поиска файлов существуют две процедуры, расположенные в модуле WinDos :

FindFirst (Маска, Флаг, Приёмник_информации) – ищет первый файл, который соответствует «маске» и «флагу», в случае обнаружения передаёт данные о найденном файле (каталоге) в переменную типа TSearchRec («приёмник информации»)

Find Next (Приёмник_информации) – ищет следующий файл, соответствующий условиям, поставленным в процедуре FindFirst, в случае обнаружения, передаёт данные о найденном файле (каталоге) в переменную типа TSearchRec («приёмник информации»)

Модуль WinDos содержит, так же переменную Dos Error , которая остаётся равной нулю до тех пор, пока команды поиска обнаруживают файл, соответствующий условию поиска. Если команды поиска не обнаружили файлы, соответствующие условию, то переменная

Маска поиска – строка с именем искомого файла или каталога. Кроме обычных символов маска может содержать «*» и «?».

* - значит, что в искомом файле на данном месте может присутствовать любое количество любых символов;

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

Примеры масок:

"*.* ’ – любой файл с любым расширением

"quest.* " – файл с название "quest" и любым расширением

"*.txt " – файл с любым названием и с расширением "txt"

"qust?.txt " – файл с расширением ‘txt’, содержащий в названии 5 букв первые 4 из которых ‘qust’, а 5-ый символ любой

"qust*.txt " - файл с расширением ‘txt’, первые четыре буквы которого ‘qust’, количество следующих букв не ограниченно

"q uest . txt ’ – файл с названием "quest" и расширением "txt"

Флаг поиска - набор специальных констант соединённых оператором OR.

Можно вместо констант использовать число, равное сумме чисел с соответствующими константами

Флаг

Тип файла

Число

faReadOnly

Искать с атрибутом «Только для чтения»

faHidden

Искать с атрибутом «Скрытый»

faSysFile

Искать с атрибутом «Системный»

faVolume ID

Возвратить идентификатор носителя

faDirectory

Возвращать информацию о каталогах

faArchive

Искать с атрибутом «Архивный»

faAnyFile

Включить все предыдущие флаги

Примеры флагов:

· faReadOn ly or FaHidden – 3 - ищутся файлы, у которых есть атрибут «скрытый» или «только для чтения»

· faDirectoty or FaSysFile - 20 – ищутся каталоги и файлы, у которых установлен атрибут «Системный»

Приёмник информации – переменная типа TSearchRec, которая будет содержать данные о найденном файле

Тип TSearchRec описан в модуле WinDos и не требует предварительного описания программистом. Данный тип – это запись следующего вида:

Type TSearchRec = Record

Fill: Array of byte; {Системный параметр, нами не используется}

Attr: Byte; {Параметр, содержащий данные о флаге файла}

Time: LongInt; {Время создания файла}

Size: LongInt; {Размер файла в байтах}

Name: Array of Char; {Имя файла}

Допустим у нас есть переменная SR, которая имеет тип TSearchRec. После использования её в команде FindFirst в ней окажется информация о найденном файле (каталоге.)

Информация об имени файла попадёт в SR. Name, о размере файла в SR. Size, а чтобы определить является ли файл системным надо соединить значение SR. Attr с константой FaSysFile оператором And. Файл системный, если результат больше нуля.

Пример :

IF Sr. Attr and FaSysFile > 0 THEN Writeln ("Системный’);

Программа ищет в каталоге "c:\Doc" все файлы с расширением "txt". И выводит на экран название тех, размер которых больше 3000 байт.

Uses Dos, crt, WinDos;

Var SR: TSearchRec; {Описываем переменную в которой будем хранить информацию о найденных файлах}

clrscr; ChDir("c:\Doc"); {Меняем текущий каталог}

FindFirst("*.txt",faAnyFile, SR); {Ищем в текущем каталоге первый файл с расширением "txt’ и любым набором флагов, результат в переменную SR}

while DosError=0 do {выполняем цикл пока файлы находятся}

if SR. Size > 3000 {если размер файла более 3000 байт}

then writeln(SR. Name); {Выводим имя найденного файла на экран}

Программа ищет все каталоги, размещённые на диске в корневом каталоге диска «С» и выводит перечень каталогов в файл "c:\info. txt ’ и на экран (Корневой каталог диска «С»– это каталог "c:\").

Uses Dos, crt, WinDos;

Var SR: TSearchRec; f:text;

Clrscr; Assign (f, "c:\info. txt"); Rewrite(f);

ChDir("c:\"); {Переходим в корневой каталог}

FindFirst("*",faDirectory, SR); {Ищем файл без расширений включая каталоги }

While DosError =0 do {выполняем цикл пока файлы находятся}

if SR. Attr and faDirectory>0 then {если файл имеет атрибут «Каталог»}

Writeln (SR. Name); {выводим имя файл на экран}

Writeln (f, Sr. Name); {выводим имя файл в файл "c:\info. txt"}

FindNext(SR); {Ищем следующий файл}

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

Процедура

Назначение

Замечание

Assign(f, ‘name’)

Связывает файловую переменную с конкретным файлом (привязывает переменную к имени файла). Ставится перед первым использованием файловой переменной.

Можно имя файла ’name’ задавать через строковую переменную (S): Assign(f, S)

Reset(f)

Открывает существующий файл и устанавливает указатель на начало записи.

Для любых файлов

Rewrite(f)

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

Для любых файлов

Close(f)

Закрывает открытый файл

Для любых файлов

Erase(f)

Стирает предварительно закрытый файл

Для любых файлов

Rename(f, f1)

Переименовывает файл f в файл f1. Файл f должен быть предварительно закрыт

Для любых файлов

Read(f, v1,…vn)

Write(f, v1,…vn)

Записывает в файл f значения переменных v1,…vn

Для типизированных и нетипизированных файлов

Readln(f, v1,..vn)

Считывает записи из файла f в переменные v1, ..vn

Writeln(f, v1,.vn)

Записывает в файл f значения переменных v1,..vn

в типизированных файлах недопустимо

Append(f)

Открывает файл и устанавливает указатель на метку конца файла

Применяется для добавления записей

seek(f, n)

Устанавливает указатель на запись с номером n

truncate(f)

Отсекает все записи, находящиеся после указателя и в этой позиции записывает метку конца файла.

Функции при работе с файловыми переменными

Процедура

Назначение

Замечание

Получение сведений о конце файла True, если указатель в конце файла, иначе - False

Логическая функция.

True, если указатель на метке конца строки, иначе - False

Логическая функция. Для текстовых файлов

N:=filesize(F);

Определение количества записей в файле

N:=filepos(f)

Выдает номер записи, на которую указывает указатель записи. Первая запись имеет номер 0.

Примеры программ

ЗАДАЧА 1: Написать программу, записывающую в текстовый файл данные об авторе и 20-ть случайных цифр

randomize; {настраиваем генератор случайных чисел}

rewrite(f); {открываем файл для записи}

r:=random(10); {генерируем случайное число от 1 до 10}

STR(r, s); {преобразуем число r в строку s}

writeln(f, s); {записываем строку с числом в файл}

close(f); {закрываем файл}

ЗАДАЧА 2: Написать программу, читающую из текстового файла данные об авторе и 20-ть случайных цифр

r, i,c: integer;

assign(f,"dddddd. txt"); {связываем файловую перем. с файлом}

reset(f); {открываем файл для чтения}

for i:=1 to 20 do {включаем цикл на 20 повторений}

readln(f, s); {читаем цифру из файла в строку s}

val(s, r,c); {переводим строку “s” в число “r”, в переменной “c” код возможной ошибки}

if c=0 then writeln(r); {если ошибки не было (с=0), то выводим цифру на экран}

close(f); {закрываем файл}

ЗАДАЧА 3: Вычислить корни квадратного уравнения и вывести результаты в файл.

Var a, b,c, x1,x2, d: real;

Assign(f,’result. txt); {связываем файл с файловой переменной f)

Rewrite(f); {открываем файл для записи}

{Читаем исходные данные с клавиатуры и отправляем их в файл}

Writeln(f, ‘решение квадратного ур-я’);

Writeln(f, "a=",a:6:3,"b=", b:6:3,"c=",c:6:3);

{Расcчитываем корни квадратного уравнения}

If d>=0 then Begin X1:=-b+sqrt(d)/(2*a); X2:=-b-sqrt(d)/(2*a); End;

{Выводим результат в файл}

If d<0 then writeln(f,’у урав-я нет корней’)

else writeln(f, ‘корни: x1=’, x1:6:3,’x2=’, x2:6:3);

{Закрываем файл и заканчиваем работу программы}

Writeln(‘рез-ты работы программы в файле result. txt’);

На диске имеется файл с именем Karl. txt, в котором записана скороговорка: "Карл у Клары украл кораллы, Клара у Карла украла кларнет." Требуется подсчитать кол-во букв «К»

Var f:text; s:integer; a:char;

{Связываем файл с файловой переменной и открываем его для записи}

Assign(f,’Karl. txt’); Reset(f);

{последовательно просматриваем все строки файла до последней}

While not eof(f) do

{последовательно читаем все символы строки до последнего в строке и сверяем его с "k"}

While not eoln(f) do

Begin Read(f, a); If a=’k’ then s:=s+1; End;

{переходим на следующую строку файла}

Ввести текст в текстовый файл f1. Переписать строку из файла f1 в f2 – первую половину файла в прямом, а вторую – в обратном порядке следования символов.

Var f1,f2:text; s, snew, sa, sb: string; n, y,i: integer;

{Связываем файлы с файловыми переменными}

Assign(f1,’file1’); Assign(f2,’file2’);

{Читаем строку с клавиатуры и отправляем её в файл №1}

Rewrite(f1); Readln(s); Writeln(f1,s); Close(f1);

{Читаем строку из файла №1}

Reset(f1); Read(f1,s1); Close(f1);

{Находим середину строки}

N:=length (s1); Y:=n div 2;

{В новую переменную записываем первую половину строки в прямом, вторую половину в обратном порядке}

For i:=1 to y do

Snew:=Snew+s1[i];

For i:=n downto y+1 do

Snew:=sew+s1[i];

{Записываем новую строку в файл №2}

Rewrite(f2); Writeln(sNew); Write(f2,sNew); Close(f2);

Текстовый файл можно рассматривать как последовательность символов, разбитую на строки длиной от 0 до 256 символов. Это файлы последовательного доступа. Структурной единицей текстовых файлов является строка. Данные в таких файлах хранятся в виде цепочки ASCIIкодов и могут обрабатываться любым текстовым редактором. Каждая строка завершается маркером конца строки. На практике такой маркер представляет собой последовательность из двух символов: перевод строкиchr(10)и возврат кареткиchr(13). Эти два символа задают стандартные действия по управлению текстовыми файлами.

Текстовые файлы описывается в разделе описания переменных:

Файловая_переменная: TextFile;

Файловая переменная – это имя переменной, которое используется в программном коде для работы с файлом.

Открытие текстового файла

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

AssignFile(файловая переменная, имя файла),

Здесь имя файла - любое выражение строкового типа, которое строится по правилам определения имен в операционной системе.

Например:

AssignFile(F,’c:\Student\Primer.Txt’);

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

Обращение к процедуре

Действие

Открывает (создает) новый файл. Имя файла предварительно определяется в процедуре AssignFile.Если на диске уже был файл с таким именем, то он уничтожается.

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

Открывает уже существующий файл для дозаписи. Запись производится в конец файла.

В таблице F– имя файловой переменной.

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

У текстовых файлов есть своя специфика. Специальные расширения стандартных процедур чтения (Read) и записи (Write), описанных ниже, разрешают работать со значениями несимвольного типа. Другими словами, последовательность символов автоматически преобразуется к значению того типа переменной, которая используется в файловых операциях.

Вызов Read(F,Ww),гдеWw- переменная типаword, осуществляет чтение из файлаFпоследовательности цифр, которая затем интерпретируется в число, значение которого и будет присвоено переменнойWw. В случае, если вместо последовательности цифр идет любая другая последовательность символов, использование такого оператора приводит к ошибке выполнения программы.

В таблице F– имя файловой переменной.V1,V2,…,Vn– переменные разных типов.

Обращение к процедуре

Действие

Read(F,V1[,V2,…,Vn]);

Считывает из дискового файла строки символов в переменные V1, V2,…,Vn.

Readln(F,V1[,V2,…,Vn]);

Read , и дополнительно – чтение до маркера конца строки и переход к новой строке

Readln (F ) без списка переменных позволяет пропустить строку в файле и перейти на новую строку.

Write(F,V1[,V2,…,Vn]);

Записывает значения переменных V1,V2,…,Vn в файл на диске.

Writeln(F,V1[,V2,…,Vn]);

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

Writeln (F ) без списка переменных. записывает в файл пустую строку.

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

Для начала разберемся, что такое текстовые файлы и в чем их различие от двоичных файлов. Текстовые файлы являются подмножеством двоичных файлов, но в отличии от двоичных не могут содержать весь набор символов. Вся информация в файле разбивается на строки, ограниченные символам возврат каретки (CR) и перевод строки (LF). Допустимые символы это символы с кодами от 32 до 255, символы с кодами ниже 32 являются управляющими и допустимы только следующие коды:

· 08 (BS) - возврат на шаг

· 09 (TAB) - табуляция

· 0A (LF) - перевод строки

· 0C (FF) – перевод листа

· 0D (CR) – возврат каретки

· 1A (EOF) – конец файла

Такая ситуация сложилась в стародавние время, когда устройством вывода были телетайпы, затем пишущие машинки и потом появились дисплеи. А каналы связи не позволяли передавать двоичные данные, да и сам они были сначала 5 битные, затем 7 битные и только потом таблицу символов расширили до 8 бит, для поддержки национальных языков и для полной совместимости с компьютерами, где основной единицей был байт. Остальные коды использовались или для управления каналом передачи или для управления специальными устройствами.

Паскаль поддерживает работу с такими файлами, через файловую переменную типа TextFile, где основной единицей является строка, состоящая из основных базовых типов (в текстовом виде, разделенных пробелом), наиболее часто это просто строка, как набор символов. В качестве примера напишем программу преобразования из DOS кодировки (OEM) в Windows (ANSI). Техническое задание:

1. Программа должна работать в консольном режиме и получать входные параметры через командную строку.

2. Программа называется Oem2Ansi

3. На вход поступают два параметра, имя исходного файла и имя выходного файла;

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

5. Если имена не указаны, то должна выводиться справка о синтаксисе команды;

6. ошибки обрабатывать будем в минимальном объеме, коды ошибок выдаются как ErrorLevel и доступны для обработки в.bat файле.

Текстпрограммы Oem2Ansi

program Oem2Ansi; {$APPTYPE CONSOLE} uses Windows, SysUtils; var InFile: TextFile; OutFile: TextFile; InFilename: string; OutFilename: string; S: string; begin if ParamCount = 0 then begin WriteLn("Syntax is: Oem2Ansi Infile "); Halt(1);// Ошибкасинтаксиса end; InFilename:= ParamStr(1); if ParamCount = 2 then OutFileName:= ParamStr(1) else OutFileName:= ChangeFileExt(InFilename, ".ans"); AssignFile(InFile, InFilename);// связываемвходнойфайл AssignFile(OutFile, OutFilename);// ивыходнойфайл try try Reset(InFile);// открываем входной файл Rewrite(OutFile);// создаем выходной файл while not EOF(InFile) do// крутимпоканеконецфайла begin Readln(Infile, S);// читаемстроку if Length(S) > 0// на вход функции можно then// подавать только не пустые строки begin OemToChar(Pchar(S), Pchar(S)); WriteLn(Outfile, S);// записываемстроку end else begin WriteLn(Outfile);// записываем пустую строку end; end; except Halt(2);// любаяошибка // не удалось преобразовать файлы end; finally CloseFile(InFile); CloseFile(OutFile); end; end.

Разберем работу программы по кусочкам. Вначале объявляются две файловые переменные текстового типа и две переменные для имен файлов, а также одна переменная для хранения и обработки строки. Затем анализируются входные параметры, если параметры не указываются, то выводится сообщение об ошибки и программа заканчивается с кодом выхода 1. Обратите внимание на форму процедуру WriteLn, если в параметрах не указывается файловая переменная, то вывод производится на консоль, что удобно для выдачи различных сообщений, данная форма возможна только для консольного приложения и не применима в GUI приложении.

После этого первый параметр копируется в переменную InFilename, если параметров два, то второй параметр копируется в переменную OutFilename, иначе используется имя входного файла и изменяется расширение, на расширение по умолчанию.ANS

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

Первое действие состоит в открытии файлов, входной файл открывается с помощью процедуры Reset -это открытие текстового файла в режиме чтения, а второй с помощью Rewrite – открытие в режиме записи, если файл существует, то он переписывается. Есть еще одна форма открытия текстовых файлов, это функция Append(FileVar), открытие в режиме добавления строк, если файл существует, то курсор позиционируется в конец файла и файл открывается в режиме записи, если файла нет, то он создается. После нее управление передается в блок finally. В случае ошибки управление сначала передается в блок except, а затем в блок finally.

После этого создается цикл чтения сток пока не будет, достигнут конец файла, или физический или будет встречен символ EOF. Функция EOF(FileVar).

Внутри цикла читается строка во временную переменную Readln(Infile, S) и тут принята одна предосторожность, в функцию Oem2Char НЕЛЬЗЯ передавать пустые строки, поэтому производится анализ длины строки, если строка не нулевая, то производится конвертирования и запись ее в выходной файл, процедурой WriteLn(Outfile, S), иначе в файл пишется пустая строка.

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

Домашнее задание - переписать в Ansi2Oem для выполнения обратной функции, с тем же техническим заданием, расширение по умолчанию OEM

Для особо желающих сделать GUI версию, с диалогами выбора файлов, с прогресс-бар, с предварительным просмотром первых 10-20 строк входного файла (переключение кнопкой OEM/ANSI), с целью определения направления перекодирования, с остальными наворотами, которые сумеет придумать душа, например пакетная обработка всех файлов из папки.



Понравилась статья? Поделиться с друзьями: