Как сохранить файл в лазарусе

Обновлено: 03.07.2024

В предыдущем уроке рассказывалось об основных инструментах разработки программ в среде Lazarus, этапах создания приложения.

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

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

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

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

В нашей первой программе при создании интерфейса пользователя будем использовать три компонента: TForm (Форма), Label (Надпись) и TButton (Командная кнопка).

Так как мы будем использовать их впервые, давайте познакомимся с ними подробнее. Нам нужно знать основные свойства этих компонентов и их назначение, чтобы можно было их настраивать. Описание свойств этих компонентов можно посмотреть перейдя по ссылкам: Forma (Форма), Label (Надпись), Button (Кнопка). С остальными компонентами графического интерфейса будем знакомиться по мере их использования.

Теперь, когда вы изучили новые компоненты, мы загрузим среду программирования и создадим свой первый проект

Проект «Первая программа»

Задание. Создать проект, который после щелчка на кнопке выводит в поле надписи текст: «Я программирую. »

Создать интерфейс программы по образцу:

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

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

Ход выполнения проекта

Lazarus. Создание проекта

    1. Загрузите Lazarus. Создайте новый проект.Для этого:1) Выполнить команду Проект => Создать проект …2)В появившемся диалоговом окне выбрать слово Приложение и нажать кнопку ОК.

    Lazarus. Создание папки для файлов проекта

    2) Не выходя из этого диалогового окна Создать новую папку Primer_1 для файлов вашего проекта (проект будет содержать несколько файлов), открыть ее и щелкнуть по кнопке Сохранить.

    Тем самым мы сохраним файл Project1, содержащий сведения о проекте.

    Сразу же откроется окно Сохранить Unit1 для сохранения программного кода проекта (файл Unit1.pas), в котором также необходимо щелкнуть по кнопке Сохранить.

    Кроме этих двух файлов в папке проекта создается автоматически еще несколько файлов, в том числе – unit.lfm, который представляет собой файл с полными данными о проектировщике формы. Позиция, размер, расположенные компоненты и пр.

    Папка проекта должна содержать следующие файлы:

    Компонент

    Свойство

    Значение

    Форма примет такой вид, как на рисунке:

    Lazarus. Обработчик события щелчок на кнопке

    Сейчас процедура обработчика события пустая, при нажатии кнопки она ничего не делает.

    2) Чтобы процедура выполнила необходимые действия, напишите соответствующий код между операторными скобками begin и end. В нашем случае это оператор присваивания, который изменяет свойство Сaption (текст надписи) объекта Label1 на новое значение:

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

    Lazarus. Система подсказки кода

    С помощью мыши вы можете выбрать из списка нужное свойство или метод.

    Lazarus. Первая программа. Протокол компиляции

    Далее этот файл, в случае успешного создания, запускается на выполнение.

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

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

    Задания для самостоятельного выполнения

    Задание 3.Создайте приложение, разместите на форме компоненты: Buton1, Edit1 так как показано на образце.

    Lazarus. Практическая работа №3

    По щелчку на кнопке нужно заменить текст в заголовке окна на текст введенный пользователем в текстовое поле.

    Lazarus. Практическая работа №4

    Lazarus. Практическая работа №5

    Наименование кнопки Отображаемый текст в надписи label1
    Форма Заготовка главного окна разрабатываемого приложения
    Инспектор объектов Окно, предназначенное для редактирования свойств объектов
    Unit1.pas Файл с программным кодом
    Проект Группа файлов, относящихся к данному приложению

    Для объектов на форме установите следующие значения свойств:

    В этом уроке мы создали свою первую программу в среде Lazarus.

    В следующем уроке мы продолжим знакомится с компонентами Lazarus, создадим еще несколько новых проектов.


    Ввод и сохранение данных в текстовом файле
    Есть переменная S (integer), нужно записать её в текстовый файл txt если в файле число меньше.

    Ввод,вывод, сохранение данных в текстовом файле
    Привет!Помогите начинающему! Я учусь сам дома,так что с терминологией не очень(. Как мне сохранить.

    Сохранение данных в текстовом файле
    Как сохранить в текстовый файл 2 переменные типа Real, получившиеся в результате выполнения неких.

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

    открыть файл, связанный с t, для записи, при это содержимое фала обнуляется
    открыть файл, связанный с t, для записи, при это содержимое фала НЕ обнуляется, запись идет в конец файла
    Прочитать из файла переменную стандартного типа(возможно только если было произведено reset(t))

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

    Команда для записи в файл переменную стандартного типа(возможно только если было произведено rewrite(t) или append(t))

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

    Команда закрытия файла

    При этом переменная очищается, если было произведено rewrite(t) или append(t) происходит перезапись нового фала на диск.

    спасибо, есть только еще один вопросик, а месторасположение файла ведь тоже вроде указывать надо? а месторасположение файла ведь тоже вроде указывать надо?

    В зависимости от случая:

    Предположим, что *.exe лежит в папке D:\programs\P1.

    1)Если путь к файлу D:\programs\P1\input.txt (т.е файл лежит в папке с программой) тогда достаточно просто указать имя файла

    2)Если путь к файлу D:\programs\P1\media\input.txt (т.е файл лежит в подпапке относительно программного каталога) тогда тоже необязательно писать весь путь
    В остальных случаях нужно указывать полный путь к файлу, например для D:\media\input.txt:
    Также в этом случаи можно воспользоватся процедурой ChDir(каталог), которая назначает каталог, откуда/куда будут читатся/писатся файлы.
    Также следует понимать, что нужно старатся избегать 3 случай(поскольку, сменил имя папки, и уже Runtime Error; и вообще, обычно не принято, что программа лазит по каталогам, не принадлещим ей). спасибо и последний вопрос. как это все связать с конкретным случаем, который я описал вначале? было бы хорошо написать кусок программы, где данные массива размерностью NxN ,а именно а11,а12, а21,а22 брались с текстового файла?
    типа:
    Читай файл построчно, строки разбивай по нужным разделителям, и вытаскивай данные куда нужно. Или воспользуйся StringList-ами вместо бабушкиных методов. у меня задание: взять данные с текстового файла, сделать над ними операции и получившиеся рещультаты сохранить в текстовом файле. я добавлял StringGrid, но это не то, что нужно, а именно StringListа у меня нету

    Именно StringList есть у всех:

    Можеш, по своему вкусу заменить ii на j, сменить название файлов и оформить как процедуру

    Добавлено через 3 минуты

    Или воспользуйся StringList-ами вместо бабушкиных методов. Нет, чтобы потом разбить строку (разделитель в Delimiter, или вообще ExtractStrings, если несколько разделителей), и циклом For . in вытягать всё в массив. Вопросы? разделитель в Delimiter, или вообще ExtractStrings, если несколько разделителей Это я и имел ввиду под посимвольным чтением(признаюсь, немного неграмотно).

    Зачем изобретать велосипед? Ведь Read автоматически считывает Числа по словам(с разделением по пробелу, пробелам, табу, символу конца строки, и др., вполне достаточно).

    Добавлено через 1 минуту
    + еще strtoint лишний раз писать.

    выдает ошибку: Wrong number of parameters specified for call to "Assign"
    помогите разобраться в чем дело

    Добавлено через 1 час 27 минут
    в файле Input.txt было сначала 1 2
    3 4, потом в одну строку 1 2 3 4

    Слушайте что говорит UI.
    Работа с файлами в стиле "классического pascal" в то время, как у вас уже подключены модули с высокоуровневыми средствами для работы с I/O - это глупо.


    По коду TForm2.Button1Click:

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

    Слушайте что говорит UI.
    Работа с файлами в стиле "классического pascal" в то время, как у вас уже подключены модули с высокоуровневыми средствами для работы с I/O - это глупо.


    По коду TForm2.Button1Click:

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

    дело не в этом. я пробовал добавить ввод переменной N, ошибка та же. указывается строка где assign(t,input.txt) дело не в этом. я пробовал добавить ввод переменной N, ошибка та же. указывается строка где assign(t,input.txt) у меня приведённый код компилируется без ошибок (с предупреждениями естественно),
    так что ошибка не здесь, либо не тот код ты выкладываешь.

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

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

    Процедурный стиль

    Это довольно старый стиль, использующейся ещё во времена, когда Pascal не был объектно-ориентированным языком. Суть его в том, что задается тип файла, определяющий, какие будут храниться в нем данные. Для этого, используется конструкция вида: file of <тип данных>, где <тип данных> - название типа, который хранит в себе файл. Помимо стандартных типов (integer, extended, char и т.д.), существует особый тип - TextFile. Он определят, что каждая строка заканчивается специальным(ми) символом(ами) конца строки (См. LineEnding). Эти файлы могут быть открыты и отредактированы внутри среды Lazarus или в любом другом текстовом редакторе.

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

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

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

    Это задаётся с помощью специальной директивы компилятора:

    В случаи подавления ошибок ввода-вывода () результат операции с файлом будет храниться в переменной IOResult типа cardinal (числовой тип). Каждое число, хранимое в IOResult определяет тип возникшей ошибки(подробнее: [1]).

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

    Эти процедуры и функции находятся в модуле system. Для более подробной информации смотрите документацию FPC:

    • AssignFile (не допускайте использование процедуры Assign) - Связывает переменную с файлом
    • Append - Открывает существующий файл для записи данных в конец и их редактирования
    • BlockRead - Чтение данных из не типизированного файла в память
    • BlockWrite - Запись данных из памяти в не типизированный файл
    • CloseFile (не допускайте использование процедуры Close) - Закрыть открытый файл
    • EOF - Проверка наличия конца файла
    • Erase - Стереть файл с диска
    • FilePos - Получить позицию в файле
    • FileSize - Получить размер файла
    • Flush - Записать файловый буфер на диск
    • IOResult - Возвращает результат последней операции ввода\вывода
    • Read - Считать из текстового файла
    • ReadLn - Считать из текстового файла и перейти к следующей строке
    • Reset - Открыть файл для чтения
    • Rewrite - Создать и открыть файл для записи
    • Seek - Изменить позицию в файле
    • SeekEOF - Переместить позицию в файле в его конец
    • SeekEOLn - Переместить позицию в файле в конец строки
    • Truncate - Удалить все данные, после текущей позиции
    • Write - Записать переменную в файл
    • WriteLn - Записать переменную в текстовый файл и перейти к новой строке

    Пример

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

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

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

    Ниже приведен пример записи текста в конец файла:

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

    Объектный стиль

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

    Кроме того, большинство классов обработки строк, могут иметь возможность загружать/сохранять содержимое из/в файл. Эти методы обычно называются SaveToFile и LoadFromFile.

    Двоичные файлы

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

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

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

    Для работы с файлами большого объёма, рекомендуется использовать буфер, например в 4096 байт.

    Копирование файла

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

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

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

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

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


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

    Сегодня мы привыкли, что практически к любому символу может применяться форматирование шрифта, элементов начертания, а также определенных размеров по пользовательским предпочтениям. Существуют и более специализированные форматы, в которые входят XML, PHP, CSV и CHM, в их структуру заложен рассматриваемый тип файла TXT в качестве основы.

    Открыть файл TXT можно не только на компьютере, но и на разнообразных мобильных телефонах, смартфонах, планшетах и специальных ридерах. Работать с Text File можно на всевозможных версиях платформ Microsoft Windows, Mac OS, Linux, iOS, Android и Windows Mobile.

    Чтобы открыть TXT, большинство пользователей системы Майкрософт используют штатный Блокнот или популярный программный комплекс Microsoft Office, а вот пользователи Mac OS используют стандартную утилиту TextEditor.

    Для чего нам может быть нужен “просто текст”? Мощные высокопродуктивные печатающие устройства в банках, например, по сей день печатают “обычный текст” (да, форматированный - но текст). Да и с точки зрения компактности хранения информации без дополнительного сжатия с ним вряд ли что сравнится. Корпоративный сектор любит “обычный TXT”.

    Создаём TEXT в Delphi без единой строчки кода!

    Прежде всего сборка проекта, после внедрение FastReport c компонентом “экспорт в Text file”, реализовываем отчёт, запускаем, нажимаем в предпросмотре “сохранить” и вызываем экспорт из предпросмотра (ниже покажу, как реализовать запись в TEXT с помощью кода Delphi). Появляется окошко настроек экспорта в TEXT.

    TXT настройки
    TXT настройки

    Настройки экспорта – переносить ли из отчёта разрывы страниц, делать ли рамку для отчета , добавлять ли пустые строки (после каждой строки отчета), использование OEM кодировки (по умолчанию используется Windows кодировка).

    Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой, которая стоит по умолчанию для открытия TEXT-документов (Блокнот, TextEditor).

    Код для сохранения в RTF сразу из Delphi / Lazarus

    Теперь мы умеем сохранять сложные документы в обычный TXT-файл! Кстати, это не единственный способ делать сложные, но целиком TXT-документы. Обратите внимание - при выборе в дизайнере отчётов FastReport File - New… (именно с многоточием) появится окно выбора “что именно новое делать хотите”.

    Новый элемент

    Выбираем “Dot-Matrix Report” - и перейдём в режим создания исключительно TXT-отчёта. Но подробнее об этом в другой раз.

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