Невозможно открыть файл для записи паскаль
Существенной особенностью всех рассмотренных до сих пор значений производных типов является наличие в них конечного, наперед заданного числа компонент. Так, в значении многомерного массива это число можно определить, зная количество компонент по каждому измерению, а в значении записи это число определяется количеством и типом полей. Таким образом, заранее, еще до выполнения программы, по этому описанию можно выделить необходимый объем памяти машины для хранения значений переменных этих типов. Но существует определенный класс задач и определенные ситуации, когда количество компонент (пусть даже одного и того же из известных уже типов) заранее определить невозможно, оно выясняется только в процессе решения задачи. Поэтому возникает необходимость в специальном типе значений, которые представляют собой произвольные последовательности элементов одного и того же типа, причем длина этих последовательностей заранее не определяется, а конкретизируется в процессе выполнения программы. Этот тип значений получил название файлового типа. Условно файл в Паскале можно изобразить как некоторую ленту, у которой есть начало, а конец не фиксируется. Элементы файла записываются на эту ленту последовательно друг за другом:
где F – имя файла, а F1, F2, F3, F4 – его элементы. Файл во многом напоминает магнитную ленту, начало которой заполнено записями, а конец пока свободен. В программировании существует несколько разновидностей файлов, отличающихся методом доступа к его компонентам:файлы последовательного доступа и файлы произвольного доступа.
Простейший метод доступа состоит в том, что по файлу можно двигаться только последовательно, начиная с первого его элемента, и, кроме этого, всегда существует возможность начать просмотр файла с его начала. Таким образом, чтобы добраться до пятого элемента файла, необходимо, начав с первого элемента, пройти через предыдущие четыре. Такие файлы называют файлами последовательного доступа. У последовательного файла доступен всегда лишь очередной элемент. Если в процессе решения задачи необходим какой-либо из предыдущих элементов, то необходимо вернуться в начало файла и последовательно пройти все его элементы до нужного.
Файлы произвольного доступа Паскаля позволяют вызывать компоненты в любом порядке по их номеру.
Важной особенностью файлов является то, что данные, содержащиеся в файле, переносятся на внешние носители. Файловый тип Паскаля – это единственный тип значений, посредством которого данные, обрабатываемые программой, могут быть получены извне, а результаты могут быть переданы во внешний мир. Это единственный тип значений, который связывает программу с внешними устройствами ЭВМ.
Работа с файлами в Паскале
Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Паскаля, кроме файлов. Иными словами, нельзя создать «файл файлов». В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.
Файловый тип или переменную файлового типа в Паскале можно задать одним из трех способов:
Здесь <имя_ф_типа> – имя файлового типа (правильный идентификатор); File, of – зарезервированные слова (файл, из); <тип_элементов> – любой тип Паскаля, кроме файлов.
Пример описания файлового типа в Паскале
TypeProduct= record
Name: string;
Code: word;
End;
Text80= file of string[80];
Var
F1: file of char;
F2: text;
F3: file;
F4: Text80;
F5: file of Product;
В зависимости от способа объявления можно выделить три вида файлов Паскаля:
- типизированные файлы Паскаля(задаются предложением file of..);
- текстовые файлы Паскаля(определяются типом text);
- нетипизированные файлы Паскаля(определяются типом file).
Следует помнить, что физические файлы на магнитных дисках и переменные файлового типа в программе на Паскале – объекты различные. Переменные файлового типа в Паскале могут соответствовать не только физическим файлам, но и логическим устройствам, связанным с вводом/выводом информации. Например, клавиатуре и экрану соответствуют файлы со стандартными именами Input, Output.
Как известно, каждый тип данных в Паскале, вообще говоря, определяет множество значений и множество операций над значениями этого типа. Однако над значениями файлового типа Паскаля не определены какие-либо операции, в том числе операции отношения и присваивания, так что даже такое простое действие, как присваивание значения одной файловой переменной другой файловой переменной, имеющей тот же самый тип, запрещено. Все операции могут производиться лишь с элементами (компонентами) файлов. Естественно, что множество операций над компонентами файла определяется типом компонент.
Переменные файлового типа используются в программе только в качестве параметров собственных и стандартных процедур и функций.
Основные процедуры и функции для работы с файлами
1.До начала работы с файлами в Паскале необходимо установить связь между файловой переменной и именем физического дискового файла:
Следует помнить, что имя дискового файла при необходимости должно содержать путь доступа к этому файлу, включая имя дисковода. При этом имя дискового файла – строковая величина, т.е. должна быть заключена в апострофы. Например:
Пример процедуры Assign в Паскале
Если путь не указан, то программа будет искать файл в своем рабочем каталоге и по указанным путям в autoexec.bat.
Вместо имени дискового файла можно указать имя логического устройства, каждое из которых имеет стандартное имя:
CON – консоль, т.е. клавиатура-дисплей;
PRN – принтер. Если к компьютеру подключено несколько принтеров, доступ к ним осуществляется по именам LPT1, LPT2, LPT3.
Не разрешается связывать с одним физическим файлом более одной файловой переменной.
2.После окончания работы с файлами на Паскале, они должны быть закрыты.
При выполнении этой процедуры закрываются соответствующие физические файлы и фиксируются сделанные изменения. Следует иметь в виду, что при выполнении процедуры close связь файловой переменной с именем дискового файла, установленная ранее процедурой assign, сохраняется, следовательно, файл можно повторно открыть без дополнительного использования процедуры assign.
Работа с файлами заключается, в основном, в записи элементов в файл и считывании их из файла. Для удобства описания этих процедур введем понятие указателя, который определяет позицию доступа, т.е. ту позицию файла, которая доступна для чтения (в режиме чтения), либо для записи (в режиме записи). Позиция файла, следующая за последней компонентой файла (или первая позиция пустого файла) помечается специальным маркером, который отличается от любых компонент файла. Благодаря этому маркеру определяется конец файла.
3.Подготовка к записи в файл Паскаля
Процедура Rewrite(f) (где f – имя файловой переменной) устанавливает файл с именем f в начальное состояние режима записи, в результате чего указатель устанавливается на первую позицию файла. Если ранее в этот файл были записаны какие-либо элементы, то они становятся недоступными. Результат выполнения процедуры rewrite(f); выглядит следующим образом:
4.Запись в файл Паскаля
При выполнении процедуры write(f, x) в ту позицию, на которую показывает указатель, записывается очередная компонента, после чего указатель смещается на следующую позицию. Естественно, тип выражения х должен совпадать с типом компонент файла. Результат действия процедуры write(f, x) можно изобразить так:
Состояние файла f до выполнения процедуры
Состояние файла f после выполнения процедуры
Для типизированных файлов выполняется следующее утверждение: если в списке записи перечислено несколько выражений, то они записываются в файл, начиная с первой доступной позиции, а указатель смещается на число позиций, равное числу записываемых выражений.
5.Подготовка файла к чтению Паскаля
Эта процедура ищет на диске уже существующий файл и переводит его в режим чтения, устанавливая указатель на первую позицию файла. Результат выполнения этой процедуры можно изобразить следующим образом:
Если происходит попытка открыть для чтения не существующий еще на диске файл, то возникает ошибка ввода/вывода, и выполнение программы будет прервано.
6.Чтение из файла в Паскале
Рассмотрим результат действия процедуры read(f, v):
Состояние файла f и переменной v до выполнения процедуры:
Состояние файла f и переменной v после выполнения процедуры:
Для типизированных файлов при выполнении процедуры read() последовательно считывается, начиная с текущей позиции указателя, число компонент файла, соответствующее числу переменных в списке, а указатель смещается на это число позиций.
В большинстве задач, в которых используются файлы, необходимо последовательно перебрать компоненты и произвести их обработку. В таком случае необходимо иметь возможность определять, указывает ли указатель на какую-то компоненту файла, или он уже вышел за пределы файла и указывает на маркер конца файла.
7.Функция определения достижения конца файла в Паскале
Название этой функции является сложносокращенным словом от end of file. Значение этой функции имеет значение true, если конец файла уже достигнут, т.е. указатель стоит на позиции, следующей за последней компонентой файла. В противном случае значение функции – false.
8.Изменение имени файла в Паскале
Здесь новое_ имя_ файла – строковое выражение, содержащее новое имя файла, возможно с указанием пути доступа к нему.
Перед выполнением этой процедуры необходимо закрыть файл, если он ранее был открыт.
9.Уничтожение файла в Паскале
Перед выполнением этой процедуры необходимо закрыть файл, если он ранее был открыт.
10.Уничтожение части файла от текущей позиции указателя до конца в Паскале
11.Файл Паскаля может быть открыт для добавления записей в конец файла
Типизированные файлы Паскаля. Длина любого компонента типизированного файла строго постоянна, т.к. тип компонент определяется при описании, а, следовательно, определяется объем памяти, отводимый под каждую компоненту. Это дает возможность организовать прямой доступ к каждой компоненте (т.е. доступ по порядковому номеру).
Перед первым обращением к процедурам ввода/вывода указатель файла стоит в его начале и указывает на его первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные и выражения в списках ввода и вывода в процедурах read() и write() должны иметь тот же тип, что и компоненты файла Паскаля. Если этих переменных или выражений в списке несколько, то указатель будет смещаться после каждой операции обмена данными на соответствующее число позиций.
Для облегчения перемещения указателя по файлу и доступа к компонентам типизированного файла существуют специальные процедуры и функции:
fileSize(<имя_ф_переменной>) – функция Паскаля, определяющая число компонентов в файле;
filePos(<имя_ф_переменной>) – функция Паскаля, значением которой является текущая позиция указателя;
seek(<имя_ф_переменной>,n) – процедура Паскаля, смещающая указатель на компоненту файла с номером n. Так, процедура seek(<имя_ф_переменной>,0) установит указатель в начало файла, а процедура seek(<имя_ф_переменной>, FileSize(<имя_ф_переменной>)) установит указатель на признак конца файла.
Текстовые файлы Паскаля. Текстовые файлы предназначены для хранения текстовой информации. Именно в таких файлах хранятся, например, исходные тексты программ. Компоненты текстовых файлов могут иметь переменную длину, что существенно влияет на характер работы с ними. Доступ к каждой строке текстового файла Паскаля возможен лишь последовательно, начиная с первой. К текстовым файлам применимы процедуры assign, reset, rewrite, read, write и функция eof. Процедуры и функции seek, filepos, filesize к ним не применяются. При создании текстового файла в конце каждой записи (строки) ставится специальный признак EOLN(end of line – конец строки). Для определения достижения конца строки существует одноименная логическая функция EOLN(<имя_ф_переменной>), которая принимает значение true, если конец строки достигнут.
Форма обращения к процедурам write и read для текстовых и типизированных файлов одинакова, но их использование принципиально различается.
В списке записываемых в текстовый файл элементов могут чередоваться в произвольном порядке числовые, символьные, строковые выражения. При этом строковые и символьные элементы записываются непосредственно, а числовые из машинной формы автоматически преобразуются в строку символов.
- текстовые файлы удобнее для восприятия человеком, а типизированные соответствуют машинному представлению объектов;
- текстовые файлы, как правило, длиннее типизированных;
- длина текстовых файлов зависит не только от количества записей, но и от величины переменных.
Но, вообще-то, такой файл не понимает не только машина, а и человек.
Чтобы избежать этой ошибки, достаточно вставить при записи в файл после каждой переменной пробел. Тогда программа при каждом чтении берет символы от пробела до пробела и правильно преобразует текстовое представление в число.
Кроме процедур read и write при работе с текстовыми файлами используются их разновидности readln и writeln. Отличие заключается в том, что процедура writeln после записи заданного списка записывает в файл специальный маркер конца строки. Этот признак воспринимается как переход к новой строке. Процедура readln после считывания заданного списка ищет в файле следующий признак конца строки и подготавливается к чтению с начала следующей строки.
Пример решения задачи с файлами Паскаля
Пусть нам необходимо сформировать текстовый файл с помощью Паскаля, а затем переписать из данного файла во второй только те строки, которые начинаются с буквы «А» или «а».
Пояснения: нам понадобятся две файловые переменные f1 и f2, поскольку оба файла текстовые, то тип переменных будет text. Задача разбивается на два этапа: первый – формирование первого файла; второй – чтение первого файла и формирование второго.
Для завершенности решения задачи есть смысл добавить еще одну часть, которая в задаче явно не указана – вывод на экран содержимого второго файла.
Запуск с правами администратора
При возникновении неполадки с установкой приложения, первое, что нужно сделать – запустить исполняемый файл от имени администратора.
Откройте Проводник сочетанием Win + E и перейдите в папку, в которой расположен файл «.exe».
Щелкните на него правой кнопкой мыши и выберите пункт «Запуск от имени администратора».
Проверьте, возникает ли ошибка при установке.
Запуск средства устранения неполадок с совместимостью
В Проводнике откройте папку с программой, кликните правой кнопкой мыши на исполняемом файле и выберите Свойства.
Откройте вкладку Совместимость. Щелкните на «Запустить средство устранения проблем с совместимостью. На следующем экране выберите «Использовать рекомендуемые параметры».
После завершения попробуйте установить проблемное приложение.
Настройка разрешений на каталог
Если установка производится в каталог, на который в учетной записи пользователя нет разрешений на запись файлов, то также столкнетесь с этой ошибкой.
Перейдите к папке, в которую пытаетесь установить программу, разверните контекстное меню правым кликом и перейдите в Свойства.
На вкладке Безопасность кликните на «Изменить».
Выберите группу Пользователи и отметьте флажком запись в столбце Разрешить. Сохраните изменения и перезагрузите ПК.
Настройка дополнительных параметров безопасности
Если простого разрешения недостаточно, его можно расширить с помощью дополнительных настроек.
Снова щелкните правой кнопкой на папке, в которую пытаетесь инсталлировать программу и откройте Свойства.
На вкладке Безопасность кликните на кнопку Дополнительно.
В окне дополнительных параметров безопасности нажмите на «Добавить».
Нажмите на ссылке «Выбрать субъект».
В поле ввода имен выбираемых объектов наберите «Все», затем уберитесь в правильности ввода нажатием на «Проверить имена» и сохраните на «ОК».
Отметьте флажком поле полного контроля в разделе Общие разрешения и нажмите на «ОК».
Перезагрузите компьютер и попробуйте установить программу.
Отключение контроля учетных записей пользователей
Несмотря на то, что функция предназначена для защиты ПК от несанкционированного использования, иногда может причинить больше вреда, чем пользы, и также может быть причастна к сбою при установке некоторых программ. Поэтому временно ее отключите.
Откройте строку системного поиска, введите «учетные записи пользователей» и щелкните на найденный результат.
Щелкните на Изменение параметров контроля учетных записей.
Переместите ползунок в нижнюю позицию «Никогда не уведомлять». Сохраните изменения, и перезагрузите компьютер. Посмотрите, возникает ли сбой.
Если предыдущие решения не сработали, скорее всего, проблемы с учетной записью. Создайте новый профиль и попытайтесь из него установить приложение.
Справочник по Pascal
Первый семестр
Второй семестр
Спецкурсы
Занятия по Выбору
Инженерные спецкурсы
Справочники
Полезные ссылки
NANO школа
Материалы по нано-олимпиаде
КППК
Домашние задания
Ошибки компилятора
Приложения написанные на Free Pascal могут генерировать ошибку времени выполнения (Run Time Error) когда в программе обнаруживаются определённые аварийные состояния . Этот документ содержит список возможных ошибок и описание их возможных причин.
1 Invalid function number (Неправильный номер функции)
Была попытка неправильного вызова системной функции.
2 File not found (Файл не найден)
Генерируется при попытке перенаименования, стирания или открытия несуществующего файла.
3 Path not found (Путь(директория) не найден)
Генерируется файловой системой когда путь не существует или неправелен. Также генерируется при попытке получить доступ к несуществующему файлу.
4 Too many open files (Слишком много файлов открыто)
Максимальное число открытых файлов для вашего процесса было превышено. Большинство операционных систем ограничивают максимальное число открытых файлов, и эта ошибка может возникнуть когда этот лимит превышен.
5 File access denied (В доступе к файлу - отказано)
Было запрешено получение доступа к файлу. Эта ошибка может произойти по нескольким причинам:
При попытке открыть файл, предназначенный только для чтения или в деиствительности являющиёся директорией, для записи. В данный момент занят или заблокирован другим процессом. При попытке создания файла или директории с именем, которое совпадает с именем уже созданного файла или директории. При попытке чтения из файла, открытого только для записи. При попытке записи в файл, открытый только для чтения. При попытке удалить директорию или файл, когда это не возможно.6 Invalid file handle (Неправильный хэндл файла)
Происходит, когда используемая Вами файловая переменная была обнулена (испорчена); Это говорит о том, что память вашей программы была повреждена.
12 Invalid file access code (Неправильные ключи доступа к файлу)
Генерируется когда процедуры reset или rewrite вызываются с неправильным параметром FileMode.
15 Invalid drive number (Неправильный номер диска)
Генерируется когда в функции Getdir или ChDir был передан неправильный номер диска.
16 Cannot remove current directory (Невозможно удалить текущую директорию)
Генерируется при попытке удалить текущую директорию.
17 Cannot rename across drives (Можно переименовывать файлы только в пределах одного диска)
Вы не можете переименовать файл в файл, находяшиёся на другом диске или в другом разделе.
100 Disk read error (Ошибка чтения с диска)
Генерируется при невозможности произвести чтение с диска. Обычно происходит при попытке чтения данных, после его окончания.
101 Disk write error (Ошибка записи на диск)
Генерируется когда Вы пытаетесь записать данные на переполненый диск.
102 File not assigned (Файл не определён)
Генерируется функциями Reset, Rewrite, Append, Rename и Erase, При передаче в них файловой переменной, для которой не была выполнена функция AssignFile.
103 File not open (Файл не открыт)
Генерируется следующими функциями : Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead, и BlockWrite если файл не был открыт.
104 File not open for input (Файл не открыт для чтения) Генерируется функциями Read, BlockRead, Eof, Eoln, SeekEof и SeekEoln если файл не был открыт при помощи Reset.
105 File not open for output (Файл не открыт для записи) Генерируется функцией write если текстовый файл не был открыт при помощи Rewrite.
106 Invalid numeric format(Неправильный числовой формат) Генерируется когда ожидалось числовое значение, но из текстого файла было прочитано не было.
150 Disk is write-protected (Диск защищён от записи)
151 Bad drive request struct length (Неправильная длина структуры запроса)
152 Drive not ready (Устройство не готово)
154 CRC error in data (Ошибка контрольной суммы в данных) (Критическая ошибка)
156 Disk seek error (Ошибка низкоуровнего поиска на диске)
157 Unknown media type (Неизвестный тип …)
158 Sector Not Found (Сектор не найден) (Критическая ошибка)
159 Printer out of paper (Нет бумаги в принтере)
160 Device write fault (Сбой записи устройства)
161 Device read fault (Сбой чтения устройства) (Критическая ошибка)
162 Hardware failure (Сбой железа)
200 Division by zero (Деление на ноль)
Приложение пыталось разделить число на ноль.
201 Range check error (Ошибка проверки границ)
Если вы компилировали прогамму с включённой провереой границ, Вы можете получить эту ошибку в следующих случаях:
Массив был вызван с индексом, выходящим за декларированые пределы. Попытка присвоить значение переменной, выходящее за декларированые границы (для instance и enumerated типов).202 Stack overflow error (Переполнение стека)
Стек превысил свой максимально допустимый размер (в этом случае необходимо уменьшить размер локальных переменных), или стек был повреждён. Эта ошибка генерируется только с включённой проверкой стека.
203 Heap overflow error (Переполнение кучи)
Размер кучи превысил максимально возможный размер. Генерируется при попытке выделить память непосредственно функциями New, GetMem и ReallocMem, или когда экземпляр класса или объекта создаётся и памяти не достаточно. Пожалуйста учтите что, по умолчанию, Free Pascal поддерживает увеличение кучи, то есть, если необходимо, будет произведена попытка её увеличения. Как бы то ни было, если размер кучи превысил максимально допустимый системой и железом, то Вы получите эту ошибку.
204 Invalid pointer operation (Непрваильная операция с указателем)
Будет сгенерирована при вызове функций Dispose или Freemem с неправильным указателем (чаще всего, Nil)
205 Floating point overflow (Максимальная границы числа с плавающей точкой) Вы попытались использовать или создать слишком большое число с плавающей точкой.
206 Floating point underflow (Минимальная граница числа с плавающей точкой)
Вы попытались использовать или создать слишком маленькое число с плавающей точкой.
207 Invalid floating point operation (Неправильная операция над числами с плавающей точкой)
Может генерироваться если вы попытались получить квадратный корень или логарифм отрицательного числа.
210 Object not initialized (Объект не инициализирован)
Если программа была скомпилирована с включенной проверкой границ, эта ошибка будет сгенерирована при попытке вызвать виртуальный метод до его конструктора.
211 Call to abstract method (Попытка вызова абстрактного метода)
Ваша программа попыталась вызвать абстрактный виртуальный метод. Абстрактные методы должны быть перекрыты, и только перекрытый метод должен быть вызван.
212 Stream registration error (Ошибка регистрации потока)
Генерируется когда неправильный тип регистрируется в модуле objects.
213 Collection index out of range (Индекс элемента коллекции выходит за допустимые границы)
Генерируется когда Вы попытались обратиться к элементу коллекции с выходящим за допустимые границы индексом (модуль objects).
214 Collection overflow error (Переполнение коллекции) Размер коллекции превысил максимально допустимый размер, а Вы попытались добавить новый элемент (модуль objects).
215 Arithmetic overflow error (Арифметическое переполнение)
Эта ошибка генерируется когда результат операции превысил допустимые границы. В отличие to Turbo Pascal, эта ошибка генерируется только для 32-bit и 64-bit арифметических переполнений. Это происходит согласно тому, что все операнды конвертируются в 32-bit или 64-bit, до того как производить вычисления.
216 General Protection fault (GP Ошибка защиты памяти)
Приложение попыталось обратиться к недопустимому участку памяти. Это может быть вызвано следующими причинами:
Попытка получить доступ к выходящему за допустимые границы участку памяти (например, вызов move с неправильной длиной).217 Unhandled exception occurred (Произошо неизвестное исключение)
Произошло исключение, и для него не существеет хэндла. Модуль sysutils устанавливает handler(менеджер), который отлавливает все исключения, и безопасно выходит в случае обнаружения оного.
219 Invalid typecast (Неправильное приведение типов)
Генерируется когда недопустимое приведение типов производится над классом используя оператор as. Эта ошибка также генерируется, когда объект или класс приводится к недопустимому объекту или классу, и виртуальный метод этого объекта или класса вызывается. Эта последняя ошибка детектируется только с использованием опции -CR компилятора.
227 Assertion failed error (Сбой утверждения)
Утверждение провалено, и процедурная переменная AssertErrorProc не была уcтановлена.
Для связи файла в коде программы и действительного файла на внешнем носителе используется процедура ASSIGN :
Текстовые файлы в паскале: процедуры работы
Возможные расширения файлов:
*.txt, *.log,
*.htm, *.html
Метод работы с текстовым файлом в Паскале предусматривает лишь последовательный доступ к каждой строке файла. Это означает, что начинать всегда возможно только с первой строки, затем проходя по каждой строке, дойти постепенно до необходимой. Т.е. можно сказать, что чтение (или запись) из файла (в файл) ведутся байт за байтом от начала к концу.
Предусмотрены два режима работы: режим для записи в файл информации и для чтения ее из файла. Одновременная запись и чтение запрещены.
Открытие файла
Допустим, мы в программе описали переменную для работы с текстовым файлом:
Рассмотрим дальнейшую последовательность работы с ним, и рассмотрим процедуры, необходимые для работы с текстовым файлом в Паскале:
процедура открытия существующего файла для чтения при последовательном доступе:
процедура открытия создаваемого файла для записи в него информации; если файл с таким именем уже существует, то информация в нем стирается:
процедура добавления в конец:
- При открытии курсор устанавливается в начало файла.
Чтение из файла
Read (f, список переменных); ReadLn (f, список переменных);
Отличие ReadLn от Read в том, что при использовании readln после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки.
- чтение осуществляется с той позиции, где в данный момент стоит курсор;
- после чтения курсор сдвигается к первому непрочитанному символу.
close ( f ); reset ( f );
Запись в текстовый файл
Write (f, список переменных); WriteLn (f, список переменных);
Процедуры работы с файлом и закрытие файла
Нахождение конца файла:
Логическая функция, возвращающая 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.
Пример 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.
Пример 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.
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)
pascal file text3. Дана строка S и текстовый файл. Добавить строку S в конец файла.* Из задачника М. Э. Абрамян (Text5)
Пример 4: Дана строка S и текстовый файл. Добавить строку S в начало файла.* Из задачника М. Э. Абрамян (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.
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.
Пример 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.
Работа с данными из файла как с массивом
- для сортировки необходим массив, для того чтобы одновременно работать со всеми числами;
- неизвестно общее количество чисел.
- объявляем массив для 100 элементов;
- открываем файл на чтение, просчитываем количество чисел, заполняя массив, сохраняем количество в N;
- сортируем N элементов массива;
- записываем результат в файл.
* Из задачника М. Э. Абрамян (Text16)
А теперь вернемся к олимпиадному заданию по Паскалю, частично решенному на одном из предыдущих заданиях:
p.in | p.out |
---|---|
3 hello earth | khoor hduwk |
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 file text7. Пять делителей.Имя входного файла: z3.in
Имя выходного файла: z3.out
Установка нового программного обеспечения в Windows 10 довольно проста, однако пользователи сообщают об ошибке Ошибка открытия файла для записи при установке определенных приложений.
Кажется, что эта проблема может повлиять практически на любое приложение, что не позволяет вам установить его.
Исправлена ошибка открытия файла для записи в Windows 10
Ошибка открытия файла для записи может быть большой проблемой, так как вы не сможете запустить определенные файлы на своем ПК. Говоря об этой ошибке, пользователи сообщили о следующих проблемах:
Решение 1. Проверьте свой антивирус
Даже если ваш антивирус имеет решающее значение для защиты вашей безопасности в Интернете, иногда антивирус может создавать помехи вашим файлам и вызывать появление этой ошибки.
Чтобы устранить проблему, пользователи предлагают изменить настройки антивируса и проверить, решает ли это проблему. Вы можете начать с отключения определенных функций и посмотреть, поможет ли это.
Если вы не знаете, какую функцию отключить, вы всегда можете полностью отключить антивирус и проверить, решает ли это проблему.
Если это не поможет, возможно, вам придется удалить антивирус и проверить, решает ли это проблему. Поскольку ваш старый антивирус вызывал эту проблему, было бы неплохо перейти на новое антивирусное программное обеспечение.
Есть много отличных инструментов безопасности, но лучшими являются Bitdefender , BullGuard, и Panda Antivirus , поэтому не стесняйтесь попробовать любой из них.
Решение 2. Запустите средство устранения неполадок совместимости
Чтобы решить эту проблему, вам нужно сделать следующее:
- Нажмите правой кнопкой мыши на установочный файл проблемного приложения.
- Выберите в меню Свойства .
- Когда откроется окно Свойства , перейдите на вкладку Совместимость .
- Нажмите Запустить средство устранения неполадок совместимости .
- Выберите Попробуйте рекомендуемые настройки .
- Следуйте инструкциям, и ваша проблема должна быть решена.
В дополнение к использованию средства устранения неполадок совместимости вы можете просто настроить программу на запуск в режиме совместимости, чтобы устранить эту проблему.
Для этого выполните следующие действия:
Если запуск приложения от имени администратора устраняет проблему, вам придется повторять этот обходной прием каждый раз, когда вы хотите запустить это приложение.
Если вы хотите более постоянное решение, вы можете настроить приложение на постоянную работу с правами администратора. Для этого просто выполните следующие действия:
- Щелкните правой кнопкой мыши приложение, которое вызывает эту проблему, и выберите «Свойства» в меню.
- Перейдите на вкладку Совместимость и установите флажок Запускать эту программу от имени администратора .
- Нажмите Применить и ОК , чтобы сохранить изменения.
После этого приложение всегда будет работать с правами администратора, и вы больше не столкнетесь с этой проблемой.
Ничего не происходит, когда вы нажимаете Запуск от имени администратора? Не паникуйте! Решите проблему как эксперт с этим руководством!
Решение 4. Переустановите проблемное приложение.
По словам пользователей, иногда эта ошибка может возникать, если вы пытаетесь запустить определенное приложение.
Если это происходит, это означает, что ваша установка, вероятно, повреждена, и для устранения проблемы вам необходимо переустановить приложение.
Есть несколько способов сделать это, но лучшим из них будет использование программного обеспечения для удаления.
В дополнение к удалению приложения, программа удаления также удалит все файлы и записи реестра, связанные с этим приложением, обеспечивая полное удаление приложения с вашего ПК.
Как только вы удалите приложение, установите его снова и проверьте, решает ли это вашу проблему.
Сделайте свою жизнь проще, удалив приложения с помощью программного обеспечения для удаления!
Если проблема с Ошибка открытия файла для записи по-прежнему сохраняется, возможно, вам придется создать новую учетную запись администратора и установить приложение на эту учетную запись. Для этого выполните следующие действия:
- Откройте Приложение настроек .
- Перейдите на вкладку Семья и другие пользователи и нажмите кнопку Добавить кого-то еще на этот компьютер .
- Выберите У меня нет информации для входа этого человека .
- Теперь нажмите Добавить пользователя без учетной записи Microsoft .
- Добавьте имя пользователя и пароль для этой учетной записи и нажмите Далее .
- Вы должны увидеть вновь созданную учетную запись в разделе Другие пользователи . Выберите его и нажмите кнопку Изменить тип аккаунта .
- В меню типов аккаунтов выберите Администратор и нажмите ОК .
- Теперь переключитесь на вновь созданную учетную запись администратора и попробуйте снова установить приложение.
Кроме того, вы можете включить скрытую учетную запись администратора с помощью командной строки. Для этого выполните следующие действия:
- Нажмите сочетание клавиш Windows Key + X и выберите в меню Командная строка (Администратор) .
- Когда запускается командная строка, введите net user administrator/active: yes и нажмите Enter , чтобы запустить ее. Это активирует новую учетную запись администратора, к которой вы можете подключиться для установки проблемного программного обеспечения.
Если вы хотите отключить эту учетную запись администратора, вернитесь к старой учетной записи, откройте командную строку как администратор и введите сетевой пользователь администратор/активный: нет .
Хотите узнать больше об учетных записях администратора? Вот лучшая статья для вас!
Если вы не можете установить определенное приложение как обычный пользователь, мы настоятельно рекомендуем вам создать учетную запись администратора или попытаться установить приложение как администратор, чтобы избежать этой проблемы.
Если вы не хотите использовать учетную запись администратора, вы можете изменить разрешения безопасности. Для этого выполните следующие действия:
- Найдите папку, в которую вы пытаетесь установить проблемное приложение. Например, это может быть каталог C: Program FilesSteam .
- Найдя каталог, щелкните его правой кнопкой мыши и выберите Свойства .
- Перейдите на вкладку Безопасность и нажмите кнопку Изменить .
- Выберите Пользователи в разделе Группы или имена пользователей и проверьте в разделе Права для пользователей , выберите Запись .
- Нажмите ОК и Применить .
После изменения разрешений безопасности вы сможете устанавливать приложения в эту конкретную папку.
Контроль учетных записей предназначен для уведомления вас о любых изменениях в системе, требующих прав администратора.
- Нажмите Ключ Windows + S и введите Учетную запись пользователя . Выберите Изменить настройки контроля учетной записи пользователя .
- Переместите ползунок полностью вниз, пока не появится надпись Никогда не уведомлять .
- Нажмите ОК , чтобы сохранить изменения.
Узнайте все, что нужно знать о контроле учетных записей, с нашим полным руководством!
В дополнение к отключению контроля учетных записей пользователей также сообщается, что отключение Защитника Windows решает эту проблему.
Если у вас установлено какое-либо стороннее антивирусное программное обеспечение, Защитник Windows должен быть отключен по умолчанию, но если вы не используете стороннее антивирусное программное обеспечение, попробуйте отключить Защитник Windows.
Стоит отметить, что стороннее антивирусное программное обеспечение может защитить ваш компьютер и повысить вашу безопасность в Интернете, и мы составили список лучших антивирусных программ для Windows 10, поэтому обязательно ознакомьтесь с ним.
Решение 8. Изменение расширенных разрешений безопасности
Если оба эти варианта не работают для вас, вы можете попробовать изменить расширенные разрешения безопасности, выполнив следующие действия:
После изменения разрешений безопасности вы сможете без проблем установить приложение в эту папку.
Мы рассмотрели лучшие очистители реестра для Windows 10, поэтому обязательно проверьте его, чтобы найти подходящий очиститель реестра для вас.
Говоря об очистителях реестра, есть много отличных инструментов, и если вы ищете новый очиститель реестра, вы можете рассмотреть возможность использования Wise Registry Cleaner , Восстановление реестра , или Advanced SystemCare .
Еще одним инструментом, который также может вам помочь, является CCleaner , поскольку он может очищать как ваш реестр, так и временные файлы.
Читайте также: