Что такое нестандартный текстовый файл
Текстовые файлы могут иметь различные форматы, в зависимости от программных средств, их создающих. При создании текстовых элементов мультимедиа необъходимо учитывать возможность их преобразования в другой формат для чтения в других программных средствах.
.TXT – расширенный набор символов для кодировки Microsoft Windows. Блокнот – простой редактор, позволяющий вводить текст с минимальными возможностями его обработки. TXT легко доступен для чтения в разных приложениях и на разных платформах.
.RTF – усовершенствованный формат текстов. Rich Text Format – так расшифровывается аббревиатура, стоящая в названии формата, созданного корпорацией Microsoft. RTF представляет собой текст, размеченный с помощью специальных «управляющих слов», что позволяет производить и сохранять достаточно сложное форматирование, вставлять сноски, колонтитулы, рисунки, таблицы и формулы, хотя в обработке этих дополнительных объектов RTF уступает формату DOC. Уступает он DOC и в объеме файлов: использование для форматирования текста «управляющих слов» вместо стилевой таблицы не приводит к компактности. Однако, RTF выигрывает спор с DOC в отношении безопасности, т.к. его внутренняя организация не предусматривает хранения макрокода и, следовательно, неуязвима к макровирусам.
Word Pad – текстовый процессор со средними возможностями.
.DOC – Microsoft Word – самый мощный из всех текстовых процессоров. В формат DOC включены самые широкие возможности обработки и форматирования текста, включая создание сносок и комментариев, а также возможности создания, размещения и редактирования таблиц, диаграмм, изображений и других элементов. Правда, в полном объеме и наиболее корректно все эти возможности реализованы только в MS Word, чему способствует позиция Microsoft, не раскрывающей текущих спецификаций популярного формата. Несмотря на то, что DOC «понимают» и другие программы, их производителям не всегда удается обеспечить его корректное распознавание. В отличие от TXT и RTF, DOC является бинарным форматом, что делает его нечитабельным в простых тектовых редакторах и, более того, не обеспечивает полной совместимости его собственных версий.
.HTML –для создания гипертекстовых документов в Интернете. HTML-документы – это текстовые файлы, доступные для просмотра и редактирования в любом текстовом редакторе. Отличие этих файлов от обычных текстовых файлов заключается в наличии специальных меток (тегов), которые определяют структуру и форматирование документа.
.PDF(Portable Document Format) – формат для хранения и просмотра документов, используются для создания веб-страниц, полностью сохраняет формат созданного документа при передаче в сети интернет. Кросплатформенный документ предназначенный для представления в электронном виде полиграфической продукции, открывает Adobe Reader и Foxit Reader.
.XML (Extensible Markup Language) – метаязык создания документов.
.DJVU - формат разработанный для хранения сканированных документов, достаточно распостраненный формат электронных библиотек, файл формата djvu открывает DjVu Reader.
.INI - текстовый файл конфигурации используется для хранения настроек в программах Windows. Открыть этот формат можно любым текстовым редактором включая Notepad и WordPad.
Для подготовки рекламных буклетов, оформления книг и журналов используются настольные издательские системы. Наиболее известные – PageMaker, QuarkXPress и Ventura
CASE-технологии
CASE-технологии – относительно новое направление, сформировавшееся на рубеже 80-х гг.
Если программа осуществляет ввод данных с клавиатуры, при каждом запуске программы приходится вводить все данных заново. Это не очень удобно, особенно при больших объёмах данных. Аналогично, если программа осуществляет вывод данных на экран, то их нельзя посмотреть повторно или обработать ещё каким-либо способом. Для того чтобы избежать этих проблем используются пользовательские файлы. В языке Паскаль определены три типа файлов: текстовые, типизированные и бестиповые. Рассмотрим сначала текстовые файлы.
Файл – это совокупность логически объединённых данных. Физическая структура файла на диске довольно сложная, файл может храниться отдельными частями в разных местах диска, а в специальной таблице указывается, к какому файлу относится каждая из частей. Это явление называется фрагментацией файлов. Фрагментация замедляет доступ к данным, и с ней обычно борются с помощью процедуры дефрагментации.
- простота создания;
- наглядность – возможен просмотр средствами текстовых редакторов;
- универсальность – можно обойтись только этим видом файлов.
С другой стороны, при использовании текстовых файлов доступ к данным осуществляет медленнее, чем при использовании других типов файлов.
Текстовый файл представляет собой совокупность строк (последовательностей символов) переменной длины, заканчивающихся специальным символом eoln – конец строки (на клавиатуре набирается нажатием клавиши «Ввод»). Файл заканчивается специальным символом eof – конец файла, который добавляется редактором автоматически.
Каждая строка текстового файла является набором символов, но при определённых условиях может интерпретироваться как набор данных других типов. Например, строка
124 56.94
может быть преобразована в целое и вещественное число или в два вещественных числа.
Текстовые файлы являются файлами последовательного доступа, т.е. читать из него данные и записывать в него данные можно только последовательно, и для того чтобы прочитать/записать, например, третий элемент, надо прочитать/записать два предыдущих.
- физическом – файл рассматривается как именованная область памяти на внешнем носителе, служащая для хранения данных, и идентифицируется именем согласно правилам операционной системы (MS DOS, Windows и т.д.);
- логическом – файл должен быть представлен в программе по правилам языка программирования.
В языке Паскаль текстовый файл в программе представляется файловой переменной, имя которой строится по обычным правилам языка, а в качестве типа используется стандартный тип TextFile, созданный специально для работы с текстовыми файлами.
Прежде чем файловая переменная может быть использована, она должна быть ассоциирована с файлом с помощью вызова процедуры AssignFile.
procedure AssignFile(var F: file; FileName: string);
При вызове этой процедуры ей передаются два параметра. Первый – это файловая переменная любого типа. Второй – строка, задающая имя файла на диске. Можно передавать полный путь к файлу, начиная с буквы логического диска, а можно использовать только имя файла и расширение – в этом случае файл будет искаться или создаваться в рабочей директории, которой по умолчанию является директория с файлами Delphi-проекта.
После вызова процедуры AssignFile файловая переменная ассоциируется с указанным файлом до вызова процедуры закрытия файла, и все действия, выполняемые над файловой переменной, выполняются над указанным файлом.
Если при вызове процедуры AssignFile указать пустую строку в качестве имени файла, файловая переменная будет ассоциироваться со стандартными текстовыми файлами – Input при использовании команды Reset и Output при использовании команды Rewrite.
После привязки файловой переменной к внешнему файлу файловая переменная должна быть открыта для того, чтобы было возможно чтение из файла или запись в файл. Для открытия файла используются процедуры Reset, Rewrite и Append.
procedure Reset(var F: file);
procedure Rewrite(var F: file);
procedure Append(var F: TextFile);
Для текстовых файлов процедура Reset открывает существующий файл в режиме «только чтение». Если файл с именем, ассоциированным с файловой переменной, не существует или не может быть открыт в указанном режиме, возникает ошибка. Указатель позиции для чтения данных устанавливается на начало файла. Если файл уже открыт, он закрывается и открывается снова.
Процедура Rewrite создаёт новый файл. Для текстовых файлов новый файл открывается в режиме «только запись». Если файл с именем, ассоциированным с файловой переменной, уже существует, он уничтожается и вместо него создаётся новый пустой файл. Указатель позиции для записи данных устанавливается на начало пустого файла. Если файл уже открыт, он закрывается и открывается снова.
Процедура Append подготавливает существующий текстовый файл для добавления данных. Если файл с именем, ассоциированным с файловой переменной, не существует, возникает ошибка. Указатель позиции для записи данных устанавливается на конец файла. Если файл уже открыт, он закрывается и открывается снова.
После открытия файла можно производить чтение данных из файла и запись данных в файл с помощью процедур Read, Readln, Write и Writeln. Однако процедуры должны соответствовать режиму, в котором был открыт файл. Попытка прочитать данные из файла, открытого только для записи, и попытка записать данные в файл, открытый только для чтения, приведут к возникновению ошибки.
Необходимо также помнить об особенностях использования процедур Read и Readln. В принципе, при вводе числе это не очень актуально, т.к. предшествующие числу переводы строки будут пропущены даже при использовании процедуры Read. Однако процедура Readln может пропустить данные, если в одной строке файла будут записаны, например, три числа, а в процедуре Readln указаны только две переменных.
Когда программа завершает работу с файлом, файл должен быть закрыт с использованием стандартной процедуры CloseFile.
procedure CloseFile(var f: file);
После закрытия файловой переменной ассоциированный с ней файл модифицируется * . Файловая переменная может быть ассоциирована с другим внешним файлом.
Существуют ещё две полезные функции работы с файлами – Eof, которая определяет, достигнут ли конец файла, и Eoln, которая определяет, достигнут ли конец строки.
function Eof(var f: file): boolean;
function Eoln(var f: text): boolean;
Функция Eof возвращает значение истина, если указатель находится за последним символом файла, или если файл пуст, и значение ложь в противном случае. Функция Eof не может применяться к файлам, открытым только для записи.
Функция Eoln возвращает значение истина, если указатель находится перед символом конца строки, или если достигнут конец файла, т.е. значение функции Eof истинно, и значение ложь в противном случае.
По умолчанию все вызовы стандартных процедур ввода/вывода проверяются на ошибки времени выполнения. В случае обнаружения ошибки возбуждается соответствующее исключение, или прерывается работа программы, если возбуждение исключения невозможно.
В Borland Developer Studion автоматическая обработка ошибок может быть включена и выключена с помощью директив компилятора и . Когда обработка ошибок отключена исключения не возбуждаются, для проверки результатов процедур ввода/вывода необходимо использовать функцию IOResult.
function IOResult(): integer;
Функция IOResult возвращает значение 0, если последняя операции ввода/вывода была успешной. В противном случае функция IOResult возвращает код ошибки. Также функция IOResult сбрасывает флаг ошибки. Если флаг ошибки после неудачной операции ввода/вывода не будет сброшен, все последующие операции ввода/вывода будут заканчиваться неудачей из-за сохранившегося значения флага ошибки.
В редакторе PascalABC, к сожалению, нет функции IOResult. Для проверки можно использовать функцию FileExists, которая проверяет существование файла.
function FileExists(name: string): boolean;
Т.к. файл, открываемый для записи, должен существовать, можно перед использованием операции Reset проверить существование нужного файла. Процедура Rewrite создаёт файл в случае его отсутствия, поэтому проверять наличие файла перед её использованием нет смысла.
- При запуске программы из консоли параметры указываются в командной строке после имени исполняемого файла.
- При запуске программы в среде Windows можно использовать ярлык, в котором также указываются параметры программы. Для этого надо создать ярлык для исполняемого файла, из контекстного меню выбрать пункт Свойства, и на вкладке Ярлык добавить параметры после имени исполняемого файла в поле Объект.
- При запуске программы из среды разработки Borland Developer Studio необходимо выбрать пункт меню Run – Parameters… и в появившемся диалоговом окне в поле Parameters ввести необходимые параметры (без имени исполняемого файла) или выбрать из выпадающего списка ранее введённый набор параметров.
- При запуске программы из редактора PascalABC необходимо выбрать пункт меню Программа – Параметры командной строки. и в появившемся диалоговом окне в поле Параметры ввести необходимые параметры (без имени исполняемого файла).
Параметры программы разделяются пробелами или табуляциями. Для того чтобы несколько слов рассматривались как один параметр (например, при вводе длинных имён папок и файлов, содержащих пробелы), параметр должен быть заключён в двойные кавычки.
Для работы с параметрами программы в языке Паскаль существуют две стандартные функции – ParamCount и ParamStr.
function ParamCount(): integer;
function ParamStr(index: integer): string;
Функция ParamCount возвращает количество параметров, переданных в программу. Функция ParamStr возвращает параметр с указанным индексом. Пользовательские параметры нумеруются с 1. Если индекс больше числа параметров, возвращается пустая строка.
Текстовые файлы в паскале: процедуры работы
Текстовый файл в Паскале — это совокупность строк произвольной длины, которые разделены между собой метками конца строки, а весь файл заканчивается меткой конца файла.
Возможные расширения файлов:
*.txt, *.log,
*.htm, *.html
Метод работы с текстовым файлом в Паскале предусматривает лишь последовательный доступ к каждой строке файла. Это означает, что начинать всегда возможно только с первой строки, затем проходя по каждой строке, дойти постепенно до необходимой. Т.е. можно сказать, что чтение (или запись) из файла (в файл) ведутся байт за байтом от начала к концу.
Предусмотрены два режима работы: режим для записи в файл информации и для чтения ее из файла. Одновременная запись и чтение запрещены.
6.4. Ввод матрицы с использованием функций Eof и Eoln
program TextFiles; const nmax = 10; type matrix = array [1..nmax, 1..nmax] of real; var f: TextFile; m, n: integer; a: matrix; begin if ParamCount < 2 then < Проверяем количество параметров >writeln('Недостаточно параметров!'); else begin if not FileExists(ParamStr(1)) then < Проверяем существование файла >writeln('Невозможно открыть файл ''', ParamStr(1), ''' для чтения'); else begin AssignFile(f, ParamStr(1)); < Открываем файл >Reset(f); m : = 0; while not eof(f) do < Цикл до конца файла >begin m : = m + 1; n : = 0; while not eoln(f) do < Цикл до конца строки >begin n : = n + 1; read(f, a[m, n]); end ; readln(f); < Пропускаем символ конца строки >end ; CloseFile(f); end ; end ; end .
* Для ускорения операций записи данные записываются в буфер, находящийся в оперативной памяти, и сбрасываются на диск только при заполнении буфера и при закрытии файла. Поэтому закрыть файл очень важно – в противном случае можно не увидеть записанных туда данных.
Дополняю - если б все так просто было бы, не спрашивала. Тип файла: файл. И все. Ничем стандартным не открывается. Открыть надо ПОЗАРЕЗ. Там забытый пароль.
может, лучше не надо тыкать все файлы подряд, особенно без расширения? как вариант - открыть hex-редактором и по заголовку попытаться оперделить, что это
файлов без расширения не бывает
Как правило, такая нестандартная ситуация возникает с текстовыми файлами, поэтому логичнее всего было открывать все файлы с незнакомым расширением при помощи текстового редактора (например, Блокнот) .
Итак, следуйте в направлении HKEY_CLASSES_ROOT\Unknown\shell, создайте здесь подраздел Open и поставьте для него значение по умолчанию Читать в блокноте. Теперь в этом подразделе Open создайте еще один раздел, назовите его Command и поставьте в нем значение по умолчанию: c:\windows\system32\notepad.exe %1. Теперь после щелчка правой кнопкой мышки по файлу с неизвестным расширением, в выпадающем меню будет появляться пункт Читать в блокноте.
В то же время, при попытке открыть файл (после двойного щелчка мыши) будет появляться окно Выбор программы, и если вы хотите чтобы файлы с неизвестным расширением сразу открывались в Блокноте, вернитесь в раздел HKEY_CLASSES_ROOT\Unknown\shell и установите значение по умолчанию Open, вместо OpenAs.
Вместо Блокнота можно использовать любой другой текстовый редактор.
Смотря откуда вы его взяли и что он из себя представляет. если, допустим, из итернета, то возможно это rar-архив, который открывается при любом установленном архиваторе. Либо это может быть текстовый формат, типа .doc
Тогда это можно открыть стандартным WordPad
Установи Адоб Акробат Ридер и Майскрософт Оффис.
Столкнулся, что стандартные средства Винды не берут файлы из этих прог.
Нужно дать файлу тип и проверить. Я всегда так делаю. Копируешь куда-нибудь и эксперементируй пока не получится..
люди вы тупые что ли? если человек пишет то так ситуация и произошла и человек по-русски написал что блокнот не читает
Рассмотрим только работу с текстовыми файлами. Файловые переменные для текстовых файлов описываются с помощью типа Text.
Файловые переменные являются структурированными и содержат различную информацию, необходимую для работы с файлом на диске, с которым они связаны. Это имя файла, его размер, текущая позиция в файле и т.д. Если вы пишите процедуры или функции для работы с файлами, передавать в них файловые переменные можно только с модификатором VAR.
Процедура или функция | Описание |
Процедура Assign(F,) | Назначает имя файла файловой переменной F |
Процедура Reset(F) | Открывает файл для чтения. Если файла с назначенным именем нет, возникает ошибка ввода-вывода |
Процедура Rewrite(F) | Создает файл и открывает его для записи. Если файл уже есть, он перезаписывается |
Процедура Close(F) | Закрывает файл, открытый ранее процедурами Reset или Rewrite |
Процедура Read[Ln](F,) | Читает из файла значения указанных переменных. ReadLn после чтения значений пропускает все оставшиеся данные до конца текущей строки и переходит на следующую |
Процедура Write[Ln](F,) | Работает, как и обычный оператор вывода, но данные записываются в текстовый файл, задаваемый переменной F |
Функция Eof(F) | Возвращает истину, если достигнут конец файла при чтении |
Для примера рассмотрим следующую задачу: на входе дан текстовый файл, в котором в каждой строке записано по 3 вещественных числа. Необходимо считать информацию из файла и создать новый файл, в каждую строку которого записать сумму чисел в соответствующей строке входного файла, как показано на следующем рисунке.
A:ARRAY [1..100,1..3] OF Real;
WHILE NOT Eof(F) DO
В языке Паскаль имеется два стандартных текстовых файла: Input и Output.
Input – это файл для ввода, чтение из которого равносильно вводу данных с клавиатуры. Например, если в программе используется оператор ввода Readln(a,b), то он выполняется аналогично оператору Readln(Input,a,b).
Файл Output – стандартный текстовый файл для вывода, запись в который приводит к выводу данных на экран. Аналогично предыдущему оператор вывода Writeln(a,b) будет выполняться как Writeln(Output,a,b).
Файлы Input и Output можно использовать только в консольных приложениях.
Возвращаясь к предыдущему примеру (в котором каждая запись представляла три вещественных числа), заметим, что не всегда данные имеют такую однородную структуру. Часто каждая запись представляет собой разнотипные данные о некотором объекте. К примеру, можно представить себе список студентов института. Для каждого студента необходимо задать такие данные, как фамилия, имя, отчество, факультет, на котором он обучается, номер группы и т.д., как показано в следующей таблице.
Фамилия | Имя | Отчество | Факультет | Группа | … |
Иванов | Петр | Николаевич | ММ | … | |
Петров | Иван | Алексеевич | ЭТ | … | |
… | … | … | … | … | … |
Каждый атрибут имеет свой тип. Как же можно описать такой список студентов в программе? Это можно сделать, например, с помощью нескольких массивов:
FIO:ARRAY [1..100,1..3] OF STRING;
Fakultet:ARRAY [1..100] OF (MM,RT,MT, … );
Group:ARRAY [1..100] OF Integer;
Такой способ во многих случаях является достаточно неудобным по целому ряду причин. Однако язык Паскаль позволяет описывать такие структуры по-другому.
Для связи файла в коде программы и действительного файла на внешнем носителе используется процедура ASSIGN :
где myfile — имя переменной (объявленной ранее в области var ), ассоциированной с файлом
c:\text.txt — путь к реальному файлу
Первый аргумент процедуры assign в паскаль — переменная, второй – путь к файлу на диске.
Для считывания из файла достаточно связать поток ввода с файлом:
begin Assign(input,'24.txt'); var s := ReadString; . end.
begin Assign(input,'26.txt'); var N := ReadInteger; var a := ReadArrInteger(N); . end.
6.1. Ввод и вывод двух чисел
program TextFiles; var f: TextFile; < Объявляем файловую переменную >m, n: integer; begin if ParamCount < 2 then < Проверяем количество параметров >writeln('Недостаточно параметров!'); else begin if not FileExists(ParamStr(1)) then < Проверяем существование файла >writeln('Невозможно открыть файл ''', ParamStr(1), ''' для чтения'); else begin AssignFile(f, ParamStr(1)); < Открываем файл >Reset(f); readln(f, m); < Чтение. Первый параметр – файловая переменная >readln(f, n); CloseFile(f); < Закрываем файл >AssignFile(f, ParamStr(2)); < Связываем файловую переменную с другим файлом >Rewrite(f); < Открываем файл для записи >writeln(f, 'm = ', m); < Запись. Первый параметр – файловая переменная >writeln(f, 'n = ', n); CloseFile(f); < Закрываем файл >end ; end ; end .
Чтение из файла (классический Pascal)
Read (f, список переменных); ReadLn (f, список переменных);
Отличие ReadLn от Read в том, что при использовании readln после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки.
- чтение осуществляется с той позиции, где в данный момент стоит курсор;
- после чтения курсор сдвигается к первому непрочитанному символу.
close ( f ); reset ( f );
Открытие файла (классический Pascal)
Допустим, мы в программе описали переменную для работы с текстовым файлом:
Рассмотрим дальнейшую последовательность работы с ним, и рассмотрим процедуры, необходимые для работы с текстовым файлом в Паскале:
процедура открытия существующего файла для чтения при последовательном доступе:
процедура открытия создаваемого файла для записи в него информации; если файл с таким именем уже существует, то информация в нем стирается:
процедура добавления в конец:
- При открытии курсор устанавливается в начало файла.
Процедуры работы с файлом и закрытие файла
Нахождение конца файла:
Логическая функция, возвращающая True, если достигнут конец файла.
Нахождение конца строки:
Логическая функция, возвращающая True, если достигнут конец строки.
Удалить файл в Паскале
Переименование файла в Паскале
rename(переменная_файла,'новое имя файла');
Закрытие:
Рассмотрим пример работы с файлами в паскале:
Пример 1: В файле text.txt записаны строки. Вывести первую и третью из них на экран.
(предварительно создать text.txt с тремя строками)
var filetext: text; a,b,c:string; begin assign(filetext,'c:\text.txt'); reset(filetext); readln(filetext,a); readln(filetext,b); readln(filetext,c); close(filetext); writeln(a); writeln(c); end.
begin Assign(input, '1.txt'); var a := ReadString; var b := ReadString; var c := ReadString; print(a, c) end.
Пример 2: Дан текстовый файл. Вывести количество содержащихся в нем символов и строк (маркеры концов строк EOLN и конца файла EOF при подсчете количества символов не учитывать).
* Из задачника М. Э. Абрамян (Text4)
var F: Text; N,K:integer; Name:String; C:Char; begin Assign(F,'c:\text.txt'); Reset(F); N:=0; K:=0; While not eof(F) do begin inc(N); While not eoln(f) do begin inc(K); Read(F,C); end; Readln(F); end; Close(F); Writeln(N,' ',K); end.
begin Assign(input, '1.txt'); var n, k: integer; while not eof(input) do begin inc(n); while not eoln(input) do begin inc(k); var a := ReadChar; end; var b := ReadString; end; print($'строк , символов ') end.
Пример 3:
Считать из файла input.txt числа (числа записаны в столбик). Затем записать их произведение в файл output.txt
var p, x: integer; f: text; begin assign(f, 'input.txt'); reset(f); p := 1; while not eof(f) do begin readln(f, x); p := p * x; end; close(f); assign(f, 'output.txt'); rewrite(f); writeln(f, 'Произведение чисел ', p); close(f); end.
begin Assign(input, 'input.txt'); Assign(output, 'output.txt'); var p := 1; while not eof(input) do begin var x := readInteger; p := p * x; end; print($'произведение
'); end.
pascal file text1. В цикле записать в файл числа от 1 до 10 (каждое — в своей строке), а затем их считать и отобразить на экране.
Дополните код:
var filetext: text; a:string; i:integer; begin assign(filetext,'c:\text.txt'); rewrite(filetext); for i:=1 to 10 do . reset(filetext); for i:=1 to 10 do begin . . end; close(filetext); end.
pascal file text2. Даны целые положительные числа N и K. Создать текстовый файл и записать в него N строк, каждая из которых состоит из K символов «*» (звездочка).
* Из задачника М. Э. Абрамян (Text1)
* Из задачника М. Э. Абрамян (Text5)
* Из задачника М. Э. Абрамян (Text7)
var F_in,F_out: Text; Name,S: String; begin Write('S: '); Readln(S); Assign(F_in,'c:\text.txt'); Reset(F_in); Assign(F_out,'c:\text1.txt'); Rewrite(F_out); Writeln(F_out,S); While not eof(F_in) do begin Readln(F_in,S); Writeln(F_out,S); end; Close(F_in); Close(F_out); Erase(F_in); Rename(F_out,'c:\text.txt'); end.
begin var s := readstring('s: '); Assign(input, 'input.txt'); Assign(output, 'output.txt'); println(S); while not eof(input) do begin s := ReadString; println(s); end; close(input); // обязательно! close(output); // обязательно! Erase(input); Rename(output, 'input.txt'); end.
pascal file text4. Дано целое число K и текстовый файл. В данном файле вставить пустую строку перед строкой с номером K . Если строки с таким номером нет, то оставить файл без изменений.
Для решения задачи можно использовать дополнительный временный файл.
* Из задачника М. Э. Абрамян (Text9)
Пример 5: Дано целое число K и текстовый файл. Удалить из файла строку с номером K . Если строки с таким номером нет, то оставить файл без изменений.
Примерный результат:
до:
* Из задачника М. Э. Абрамян (Text15)
var F_in,F_out: Text; Name,line: string; K,i:integer; begin Write('K: '); Readln(K); Assign(F_in,'c:\text.txt'); Assign(F_out,'c:\text1.txt'); Reset(F_in); Rewrite(F_out); i:=0; While not eof(F_in) do begin Readln(F_in,line); inc(i); if i<>K then Writeln(F_out,line); end; Close(F_in); Close(F_out); Erase(F_in); Rename(F_out,'c:\text.txt'); end.
begin var k := readinteger('k: '); Assign(input, 'input.txt'); Assign(output, 'output.txt'); var i:=0; while not eof(input) do begin var s := ReadString; inc(i); if i<>k then println(s); end; close(input); // обязательно! close(output); // обязательно! Erase(input); Rename(output, 'input.txt'); end.
Пример 6: Дан текстовый файл F1 с набором нулей и единиц. Необходимо заменить все вхождения сочетаний 101 на 000 . Скорректированные записи поместить в файл F2 .
var f1,f2: text; pole:string; pz:integer; begin assign(f1,'1.txt'); assign(f2,'2.txt'); reset(f1); rewrite(f2); while not eof(f1) do begin readln(f1, pole); while pos('101',pole)<>0 do begin pz:=pos('101',pole); delete(pole,pz,3); insert('000',pole,pz); end; writeln(f2,pole) end; close(f1); close(f2); end.
begin Assign(input, 'input.txt'); Assign(output, 'output.txt'); var s:=readString; var s1:=''; var ind := s.IndexOf('101'); while ind<>-1 do begin s1+=s[:ind+1]; s1+='000'; delete(s,1,ind+3); // удаляем всё вместе с 101 ind := s.IndexOf('101'); end; s1+=s; Println(s1); end.
6.3. Ввод массива до конца файла
program TextFiles; const nmax = 10; type mas = array [1..nmax] of real; var f: TextFile; n: integer; a: mas; begin if ParamCount < 2 then < Проверяем количество параметров >writeln('Недостаточно параметров!'); else begin if not FileExists(ParamStr(1)) then < Проверяем существование файла >writeln('Невозможно открыть файл ''', ParamStr(1), ''' для чтения'); else begin AssignFile(f, ParamStr(1)); < Открываем файл >Reset(f); n : = 0; < Ни одного элемента ещё не введено >while not eof(f) do < Организуем цикл до конца файла >begin n : = n + 1; read(f, x[n]); < Вводим элементы массива и считаем их количество >end ; CloseFile(f); end ; end ; end .
6.2. Вывод массива
program TextFiles; const nmax = 10; type mas = array [1..nmax] of real; var f: TextFile; n, i: integer; a: mas; begin . AssignFile(f, ParamStr(2)); Rewrite(f); writeln(f, 'Массив A из ', n, ' элементов/-а'); for i : = 1 to n do write(f, a[i]:8:2); writeln(f); CloseFile(f); end .
Работа с данными из файла как с массивом
Пример 7: В файле input.txt записаны числа (каждое — с новой строки), их количество не превышает 100. Необходимо отсортировать их по возрастанию и записать в файл output.txt.
- для сортировки необходим массив, для того чтобы одновременно работать со всеми числами;
- неизвестно общее количество чисел.
- объявляем массив для 100 элементов;
- открываем файл на чтение, просчитываем количество чисел, заполняя массив, сохраняем количество в N;
- сортируем N элементов массива;
- записываем результат в файл.
pascal file text5. В файле input.txt записаны числа (каждое — с новой строки), их количество не превышает 100. Необходимо найти максимальное и минимальное число и записать их в файл output.txt.
* Из задачника М. Э. Абрамян (Text16)
А теперь вернемся к олимпиадному заданию по Паскалю, частично решенному на одном из предыдущих заданиях:
Пример 8: Шифр Цезаря заключается в том, что каждая буква исходной строки заменяется третьей после нее буквой в алфавите, который считается написанным по кругу (все символы текста латинские и прописные).
Решить ту же задачу, в которой сдвиг будет не на 3 позиции, а на k, причем отрицательное значение является признаком сдвига влево, положительное — вправо.
Формат входных данных (файл p.in): В первой строке записано число k, не превышающее по модулю 20. Во второй строке — текст, который необходимо зашифровать. Все символы текста латинские и прописные.
Формат выходных данных (файл p.out): Выведите зашифрованный текст.
Пример:
p.in | p.out |
---|---|
3 hello earth | khoor hduwk |
* желательно создать файлы и записать данные в исходный файл «вручную»
* программа решена для k=3, выполните программу для любых k (не превышающих 20 по модулю)
var a:char; i,n,k:byte; s,s1:string; f_in,f_out:text; begin Assign(F_in,'z:\p.in'); Assign(F_out,'z:\p.out'); Reset(F_in); Rewrite(F_out); s1:=''; readln(f_in,k); readln(f_in,s); for i:=1 to length(s) do begin n:=ord(s[i]); if n<>32 then n:=n+3; if . then . ; if . then . ; if . then . ; a:=chr(. ); s1:=. ; end; writeln(s1); writeln(f_out,s1); close(f_in); close(f_out) end.
var a:char; i,n,k:byte; s,s1:string; f_in,f_out:text; begin Assign(F_in,'z:\p.in'); Assign(F_out,'z:\p.out'); Reset(F_in); Rewrite(F_out); s1:=''; readln(f_in,k); readln(f_in,s); for i:=1 to length(s) do begin n:=ord(. ); if n<>32 then n:=n+3; if n=123 then n:=97; if n=124 then n:=98; if n=125 then n:=99; a:=chr(n); s1:=s1+a; end; writeln(s1); writeln(f_out,s1); close(f_in); close(f_out) end.
полное решение var s, s1: string; i, j, a, n, k, b: integer; begin n := 97; s1 := ''; readln(s); readln(k); for i := 1 to length(s) do begin if s[i] <> ' ' then begin a := ord(s[i]); if a > 122 - k then for j :=123 - k to 122 do begin b:=122-j; if a = j then begin a := n+k-b-1; inc(n); end; end else a := a + k; s1 := s1 + chr(a) end else s1 := s1 + ' ' end; writeln(s1)end. -->
Запись в текстовый файл (классический Pascal)
Write (f, список переменных); WriteLn (f, список переменных);
где f — файловая переменная, а второй параметр – выводимые из программы и вводимые в файл данные (в виде значений переменных или просто данные)
Читайте также: