Как открыть файл в паскале

Обновлено: 21.11.2024

Быстрый способ открытия файлов с расширением PASCAL

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

На вашем компьютере нет соответствующего программного обеспечения (неизвестный файл Apple II — самый популярный программный пакет, использующий файл PASCAL).

Возможно, у вас есть неизвестный файл Apple II, но ваш компьютер не настроен для связывания файлов PASCAL с соответствующим программным обеспечением.

Файл поврежден.

Дополнительное предложение для File Magic от Solvusoft | ЛСКП | Политика конфиденциальности | Условия | Удалить

Если у вас нет неизвестного файла Apple II

Чтобы открыть файл PASCAL, вам необходимо загрузить Unknown Apple II File или другой аналогичный программный пакет.

Если ваш компьютер не настроен для открытия файлов PASCAL

Если у вас есть соответствующее программное обеспечение, но ваш компьютер по-прежнему не открывает это программное обеспечение, вам придется изменить ассоциации файлов в Windows или Mac. В зависимости от вашей операционной системы вы можете убедиться, что ваш компьютер всегда открывает файлы PASCAL с помощью Unknown Apple II File или другой программы по вашему выбору, которая использует файлы PASCAL.

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

< td>Неизвестный файл Apple II
Программное обеспечение Разработчик
найден на компакт-диске Golden Orchard Apple II

Если файл PASCAL поврежден

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

Легкий способ открыть файл PASCAL

Если вы не хотите загружать Неизвестный файл Apple II (по какой-либо причине), а другие варианты также не работают. это нормально!

Несмотря на то, что некоторые файлы PASCAL необходимо открывать в программе, для которой они были разработаны (двоичный формат), вы все же можете открыть их в универсальном средстве просмотра файлов, таком как File Magic. Загрузите File Magic прямо сейчас из Microsoft Store и откройте файл PASCAL!

Рекомендуемая загрузка

К сожалению, ваш браузер не поддерживает встроенные видео.

Дополнительное предложение для File Magic от Solvusoft | ЛСКП | Политика конфиденциальности | Условия | Удалить

Открывает все ваши файлы
КАК ВОЛШЕБНО! 1

Дополнительное предложение File Magic от Solvusoft
EULA | Политика конфиденциальности | Условия | Удалить

1 Неподдерживаемые типы файлов можно открывать в двоичном формате.

Просмотреть файлы

Вы загружаете пробную версию программного обеспечения. Чтобы разблокировать все функции программного обеспечения, необходимо приобрести годовую подписку на программное обеспечение по цене 39,95 долларов США. Подписка автоматически продлевается в конце срока (Подробнее). Нажимая кнопку «Загрузить» выше и устанавливая «File Magic», я подтверждаю, что прочитал и согласен с Лицензионным соглашением с конечным пользователем File Magic и Политикой конфиденциальности.

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

Старый процедурный стиль

При использовании файлов в классическом (не объектно-ориентированном) Паскале вы можете использовать файл типа TextFile (или просто Text) для хранения текста, который обычно состоит из строк. Каждая строка заканчивается маркером конца строки (LineEnding). В файле этого типа можно хранить строки, а также числа, которые можно форматировать по-разному. Эти файлы можно открывать и редактировать в Lazarus IDE или любом другом текстовом редакторе.

Для определенных целей вы можете создать свой собственный тип файла, который может хранить только один тип данных. Например:

Обработка ошибок ввода/вывода

Флаг обработки ошибок ввода-вывода указывает компилятору, как поступать в случае ошибки: создать исключение или сохранить результат ввода-вывода в переменной IOResult. Флаг обработки ошибок ввода/вывода является директивой компилятора. Чтобы включить или отключить его:

За счет подавления ошибок ввода-вывода () результаты файловых операций попадают в переменную IOResult. Это кардинальный (числовой) тип. Разные цифры означают разные ошибки. Поэтому вы можете проверить документацию на наличие различных ошибок[1].

Файловые процедуры

Эти процедуры и функции обработки файлов расположены в модуле System.Дополнительные сведения см. в документации FPC: Справочник для модуля «Система».

  • AssignFile (предотвращает использование старой процедуры Assign) — присвоение имени файлу
  • Добавить — открывает существующий файл для добавления данных в конец файла и его редактирования.
  • BlockRead — чтение данных из нетипизированного файла в память
  • BlockWrite — запись данных из памяти в нетипизированный файл
  • CloseFile (предотвратить использование старой процедуры Close) — закрыть открытый файл.
  • EOF – проверка на конец файла
  • Стереть – стереть файл с диска.
  • FilePos — получение позиции в файле
  • FileSize — получить размер файла
  • Flush — запись файловых буферов на диск
  • IOResult — возвращает результат последней операции ввода-вывода с файлом.
  • Чтение – чтение из текстового файла.
  • ReadLn — чтение из текстового файла и переход к следующей строке.
  • Сброс – открывает файл для чтения.
  • Переписать — создать файл для записи
  • Искать – изменить положение в файле
  • SeekEOF – установить положение файла в конец файла
  • SeekEOLn – установить положение файла в конец строки
  • Truncate — обрезать файл в нужном месте.
  • Запись – запись переменной в файл.
  • WriteLn — запись переменной в текстовый файл и переход на новую строку

Пример

Полный пример обработки текстового файла типа TextFile:

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

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

Вот как работает добавление текста в текстовый файл:

Чтение текстового файла:

Стиль объекта

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

Кроме того, большинство классов обработки строк имеют возможность загружать и сохранять содержимое из/в файл. Эти методы обычно называются SaveToFile и LoadFromFile. Многие другие объекты (например, сетки Lazarus) имеют аналогичную функциональность, включая наборы данных Lazarus (DBExport). Стоит просмотреть документацию или исходный код, прежде чем пытаться создать собственные процедуры сохранения/загрузки.

Общие файлы любого типа

Для открытия файлов для прямого доступа можно использовать TFileStream. Этот класс является инкапсуляцией системных процедур FileOpen, FileCreate, FileRead, FileWrite, FileSeek и FileClose, находящихся в модуле SysUtils.

Вот очень простой пример добавления одного файла к другому с использованием потоков. Это эквивалентно приведенному выше примеру добавления, но намного проще:

В приведенном ниже примере обратите внимание, как мы инкапсулируем действие обработки файла с помощью блока try..except, чтобы ошибки обрабатывались правильно, как и в случае с классическими процедурами обработки файлов (чтобы не запутывать пример, fsOut.write не является поместите внутрь блока try. finally).


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

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

ФайлКопировать

Используя вышеизложенное, мы можем реализовать простую функцию FileCopy (у FreePascal ее нет в RTL, хотя у Lazarus есть copyfile) — при необходимости настроить для больших файлов и т. д.:

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

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

Демонстрация: сохранение одной строки в файл

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

Обработка файлов в режиме ISO

Параметры командной строки

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

Программа скомпилирована с помощью fpc -Miso isotest1.pas и запускается с ./isotest1 externa1l.txt external2.dat . files1 назначается external1.txt, а file2 — external2.dat.Без параметров командной строки файлы назначаются на стандартный ввод и стандартный вывод. Пока есть только один файл для ввода и один для вывода, такое же назначение может быть достигнуто с помощью этой команды: ./isotest1 external2.dat . файл1 должен существовать до запуска, будет создан файл2.

Прозрачные имена файлов

Второй вариант — это прозрачные имена файлов, достигаемые с помощью параметра компилятора -Sr. Пример:

Если программа скомпилирована с помощью fpc -Miso -Sr isotest2.pas и запущена без параметров командной строки, внешние файлы FILE1.txt и FILE2.txt читаются и записываются. Обратите внимание на преобразование внутренних имен файлов в верхний регистр. Файлы с другими именами по-прежнему можно использовать с помощью параметров командной строки.

Объявление файла [ ​​edit | изменить источник ]

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

В приведенном выше примере StoredNumbers — это файл для хранения целых чисел. На носителе данных он будет содержать некоторую последовательность целых чисел, каждое из которых хранится в двоичном коде, точно так же, как в памяти. Это называется "бинарный файл". Запись в файл скопирует целое число из памяти; чтение из файла скопирует его в память. Как на самом деле читать и записывать значения, будет рассказано в ближайшее время.

В двоичных файлах могут храниться не только целые числа, но и другие данные. В предыдущем примере логический файл также был объявлен с именем TruthValues. Это будет файл, заполненный только некоторой последовательностью значений True и False. Пользовательские типы, такие как записи, также могут храниться в файлах. Например, мы можем представить себе приложение, которое хранит список всех компьютеров, которые кто-то использует для написания программного обеспечения. Для каждой машины он может хранить серийный номер; название производителя; был ли компьютер настольным или другим устройством; и будь то персональный, учебный или рабочий компьютер.

Вывод файла [ ​​редактировать | изменить источник ]

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

Вот простой пример записи первых 20 правильных квадратов в файл.

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

Ввод файла [ ​​редактировать | изменить источник ]

Если данные уже были записаны в файл, они также могут быть считаны обратно в память. Мы по-прежнему используем Assign и Close, но вместо этого открытие файла выполняется с помощью процедуры Reset. Сброс сообщает компьютеру, что файл предназначен для ввода, а не вывода. Мы используем команду Read для получения значения, снова указав сам файл в качестве первого аргумента.

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

В приведенном выше случае мы уже знали, что в файле всего двадцать чисел, но это не всегда так. Иногда размер файла заранее неизвестен. Если бы мы позволили пользователю выбирать, сколько идеальных квадратов хранить, программа ввода должна была бы быть готова к любому возможному количеству входных данных. Для этого Паскаль предоставляет функцию EOF, что означает «Конец файла». EOF верен только тогда, когда в файле не осталось элементов для чтения. EOF может быть верным даже при первом открытии файла, если он оказался пустым. Функция действует как сигнал «больше нет данных или вообще нет данных».

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

Текстовые файлы [ редактировать | изменить источник ]

Представьте, что мы объявили такой файл:

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

На самом деле мы можем свободно использовать текстовые файлы в Паскале, и даже есть ярлык для их объявления:

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

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

Обратите внимание, что в приведенном выше примере возраст и вес указаны с пробелом между ними. Это сделано для того, чтобы люди или компьютер могли распознавать их как отдельные числа. Если бы они были написаны на одной строке и между ними ничего не было бы, они выглядели бы как одно число вместо двух. Возраст 30 и Вес 91 сливаются в 3091. Остерегайтесь этой ловушки в текстовых файлах.

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

Чтение текстовых файлов

Что такое текстовые файлы? Точно так же, как этот файл, файлы для чтения, AUTOEXEC.BAT и CONFIG.SYS. Все файлы с расширением .INI являются текстовыми файлами. На этот раз мы обсудим, как написать или прочитать его. Посмотрите на это:

F — это переменная текстового файла. Первое, что мы должны сделать, это связать его с именем файла, например:

Прежде чем вы сможете его ПРОЧИТАТЬ, вы должны его открыть :

Вы можете читать файл построчно, так же, как и при вводе user. Предположим, что s — строковая переменная:

Обратите внимание, что разница между обычным readln и этим типом readln заключается в файловой переменной F.

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

После использования этого файла НЕ ЗАБУДЬТЕ ЗАКРЫТЬ ЕГО. Как?

Итак, прочитать весь текстовый файл можно так:

Легко и просто, верно?

Как его создать? Первое, что вы делаете, то же самое: свяжите текстовую переменную с именем файла, используя ключевое слово assign. Затем вы создаете его, используя rewrite вместо reset :

Затем используйте свою логику: чтобы записать в него строки, используйте writeln вместо readln:

И написав все внутри, не забудьте закрыть его тем же close.

Итак, запись текстового файла выглядит следующим образом:

Внимание!
Если вы перезаписываете существующий файл, это означает, что вы удаляете его и создаете новый.

Как мы можем просто добавить текст, не уничтожив его? Вместо этого используйте append. Измените rewrite в программе выше на append. Запустите их и увидите разницу.

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

Pascal использует внутренний буфер для хранения текстовой информации. Буфер — это временное место, обычно это массив или указатель на ячейку памяти. О указателе будет рассказано в уроке 2. Буфер используется для ускорения (кэширования) процесса чтения или записи любого файла, в том числе текстового. Объем буфера ограничен, но его достаточно для процессов на Паскале. Если буфер заполнен, Паскаль сбрасывает его содержимое на диск.

Теперь иногда нужно убедиться, что размер буфера не превышает максимального. Но ждать . ! Вы сказали, что этого достаточно? Да это так. Но очистка буфера вручную может спасти ситуацию. Скажем, линия питания внезапно вышла из строя, а содержимое буфера не было записано на диск. Это трагично, не так ли? Вы же не хотите, чтобы пользователь вашей программы сказал: «АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА, не так ли?

Очистка буфера вручную выполняется путем добавления flush(f); где-нибудь в вашей программе, прежде чем вы закроете файл. Подобную ручную очистку можно выполнить только в текстовых файлах. Как насчет бинарных файлов? Позже, в следующей главе.

Теперь мы обнаружили, что запись или чтение файлов может быть не такой гладкой, как мы думали. Иногда при чтении файла указанный файл не найден или имеет поврежденный сектор, поэтому мы не можем его прочитать. Если мы не используем процедуру обработки ошибок, предусмотренную в Паскале, Паскаль просто крикнет: «Эй! Это ошибка", а затем завершает работу программы без уведомления.

Этот тип обработки ошибок довольно устарел, поскольку в то время еще не было изобретено новых методов перехвата ошибок. Но я думаю, что пока этого достаточно, но это утомительная задача. Но подумайте о пользователе. Не позволяйте боли прийти. Вот обработка ошибок. Добавьте это:

Ошибку можно обнаружить, вызвав функцию IOResult. Если IOresult равен 0, это означает отсутствие ошибки. Например:

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

Вы видите, что можете обнаружить это. Чтобы ваша программа не содержала ошибок во время выполнения, вы должны делать это для КАЖДОЙ команды ввода/вывода, то есть для каждой команды readln, reset, rewrite, writeln, append и flush. .Только assign и close в этом нет необходимости. Уф, должно быть, это очень утомительная задача.

Теперь, когда вы научились обрабатывать ошибки. Другие сообщения об ошибках можно увидеть в справке (ошибка времени выполнения). Даже эта глава уже закончена, я все равно даю вам ДОПОЛНИТЕЛЬНУЮ !

Это дополнение касается обнаружения аргументов/параметров, переданных в нашу программу. Паскаль предоставляет две общие «переменные», а именно: paramcount и paramstr. Paramcount — это словесная переменная, указывающая количество параметров, которые передаются в нашу программу. Paramstr — это массив строк, содержащих содержимое параметров. Пример:

Как мы можем протестировать эту программу? Должны ли мы выйти из IDE и запустить EXE-файл самостоятельно? Нет нужды ! Borland Pascal обеспечивает «моделирование параметров». Проверьте меню: «Выполнить», затем выберите «Параметры». Затем вы задали параметры, которые будут переданы в программу. Напишите в нем любое предложение или слово и нажмите Enter. Запустите его и посмотрите, что произойдет. Да, это было похоже на запуск программы EXE в командной строке DOS и передачу параметров вручную. Легко, правда?

Хорошо, пока это все. Пойдем на викторину или на следующий урок? Или вы все еще не понимаете? Напишите мне!

Читайте также: