Сохранить переменную типа Object в файл | |
---|---|
Chips Автор Сообщений: 93 Дата регистрации: 11.02.2016 |
Добрый день.
Как сохранить переменную типа Object в файл? Может есть какая нибудь простая команда, вроде SAVE TO / RESTORE FROM ? |
Re: Сохранить переменную типа Object в файл | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Для какой цели? И что именно должно сохраняться?
При копировании/сериализации объектов есть как минимум 2 разные стратегии - Deep Copy и Shallow Copy - в зависимоти от того как поступать с полями объекта содержащими ссылки на другие объекты - копировать/сериализовать их, или только копировать/сериализовать поля примитивных типов данных. Встроенных механизмов что копирования (клонирования), что сериализации/десериализации в фоксе нет. Свои сделать можно, но лично я в этом не вижу никакого смысла. ------------------ WBR, Igor |
Re: Сохранить переменную типа Object в файл | |
---|---|
Chips Автор Сообщений: 93 Дата регистрации: 11.02.2016 |
Хочу сделать класс для настроек. Исправлено 1 раз(а). Последнее : Chips, 03.08.17 14:09 |
Re: Сохранить переменную типа Object в файл | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Обычно в фоксе делают наоборот - класс ЧИТАЮЩИЙ некоторый настроечный файл (ini/xml/dbf/txt) и возвращающий эти самые настройки по запросу. Он может возвращать значения через метод - типа GetSetting("Name"), а может и динамически добавлять свойства .AddProperty() в соответствии с тем что было считано из файла.
Не сложно в этом же классе сделать и обратное сохранение значений настроек в файл. В простейшем случае вообще ограничиваются парой обычных "старорежимных функций" для чтения и для записи настройки по имени (но класс всё же лучше). В шарпе, к слову, тоже никто не "сохраняет объект в файл" для чтения/записи настроек приложения - там есть свой, достаточно сложный и развитый механизм для хранения настроек. И VisualStudio просто генерирует класс Settings для использования этого механизма. ------------------ WBR, Igor |
Re: Сохранить переменную типа Object в файл | |
---|---|
Chips Автор Сообщений: 93 Дата регистрации: 11.02.2016 |
хм... Значит надо добавить к классу методы "Сохранить" и "Восстановить" настройки?
|
Re: Сохранить переменную типа Object в файл | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
К примеру как-то так (очень грубо и упрощённо - для варианта хранения настроек в тривиальном dbf)
Методы для контроля/преобразования "абы какого" названия настройки к корректному и непротиворечивому для фокса "имени свойства" (например не пересекающегося со "встроенными" именами методов/свойств, не начинающегося с цифры, не содержашего пробелов и т.п.), для непротиворечивого преобразования значения произвольного типа к строке и обратно (например для дат - чтобы способ преобразования не зависел от настроек SET DATE, SET CENTURY и т.п. для чисел - от SET POINT и т.д.) - это всё уж сам придумай как сделать Заодно обработку ошибок прикрутить (для корректного отслеживания ситуаций типа нет файла настроек, или если вместо "числа" в настройке с типом N одни буквы сидят)... ------------------ WBR, Igor |
Re: Сохранить переменную типа Object в файл | |
---|---|
Chips Автор Сообщений: 93 Дата регистрации: 11.02.2016 |
Не так уж и просто, как может показаться.
Ок. Будем работать... Спасибо за пример. |
Re: Сохранить переменную типа Object в файл | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Хм, а в чём сложности то? Простейшая логика - взяли хранилище, перебираем что там есть, добавляем свойства (если свойство уже есть, просто значение новое в него помещаем - благо AddProperty так работает). Всё прочее - чисто служебная обвязка. Ну да, для удобства ещё можно группу методов типа Add(name, value), AddIfNotExist(name, value), Remove(name) - чтобы убрать надобность в "ручной" работе с хранилищем настроек (начальное наполнение, удаление устаревших и т.п.)
------------------ WBR, Igor |
Re: Сохранить переменную типа Object в файл | |
---|---|
lemenev Сообщений: 112 Дата регистрации: 23.06.2022 |
Проглядывая старые темы, я наткнулся на идею, предложенную Игорем Королёвым. Она меня заинтересовала, и мне захотелось её реализовать. То, что получилось выкладываю на всеобщее обозрение. Программа представляет для меня не практический, а учебный интерес, так что любая конструктивная критика по методологии, реализации, оформлению только приветствуется. Для того и публикую.
|
Re: Сохранить переменную типа Object в файл | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Разве что для любителей потрындеть, а то без ИК совсем затихли, скучновато стало. ЗЫ. С dbf работают в форме. Пара процедур от ИК останутся в загрузчике, значит должен быть еще и обработчик ошибок. Тогда и появится смысл возиться с SET-настройками и т.п., их обычно больше сотни. Для параметров лучше использовать класс EMPTY. ЗЫ2. Вот и красные художники опять ожили, так что не все еще потеряно ... Исправлено 2 раз(а). Последнее : lulgu, 20.08.22 22:51 |
Re: Сохранить переменную типа Object в файл | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Например:
Если при вызове будет 100500 ошибок, то "упаришься" ОК жать. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Сохранить переменную типа Object в файл | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Надо настройки отлаживать, чтобы таких ошибок не было. А если появятся, то их с первого раза ловят обработчиком ошибок. |
Re: Сохранить переменную типа Object в файл | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
|
Re: Сохранить переменную типа Object в файл | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
И что мне прикажете делать с вашими археологическими раскопками: 2004г, piva sys(1079,0) - только VFP8 - фокс вылетает с баг репортом - Отладочный вылет Не пользуйтесь некондицией, только и всего. ЗЫ. Интересно, а вы сможете продемонстрировать новичку полноценный обработчик ошибок? Исправлено 1 раз(а). Последнее : lulgu, 22.08.22 00:03 |
Re: Сохранить переменную типа Object в файл | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
1.
Я всегда пишу так. Так и читается проще. Ну и в других языках так пишется. Вдруг кому код отдать придется или себе.
2.
Я бы заменил на следующее. Читабельность и восприятие упрощается, ну и лишнее переменные чтоб не городить.
Исправлено 2 раз(а). Последнее : Taran, 22.08.22 08:10 |
Re: Сохранить переменную типа Object в файл | |
---|---|
lemenev Сообщений: 112 Дата регистрации: 23.06.2022 |
Думаю, что это тот редкий случай, когда lulgu прав. Массовые (100500) ошибки в настройках отлаживаются с первого раза и ловятся встроенным обработчиком ошибок. Другой разговор, нужны ли именно эти две проверки. Дело в том, что функция DeserializeValue вызывается в одном единственном месте, получая данные из файла настроек. Если такой файл отсутствует, то он создаётся программно с заведомо правильной структурой. И в дальнейшем поля Settings.Value и Settings.Type – символьного типа. Т.е. надобность в этих проверках может возникнуть, если предположить следующий сценарий: файл Settings подменяется другим, имеющим поля Value и Type, но не символьного типа. И из этого нового файла пытаются загрузить настройки. Думаю, что вероятность такого крайне мала. Но я перестраховался. |
Re: Сохранить переменную типа Object в файл | |
---|---|
lemenev Сообщений: 112 Дата регистрации: 23.06.2022 |
Спасибо за практические рекомендации по стилю программирования. Особенно понравилась замена конструкции CASE на функцию ICASE. |
Re: Сохранить переменную типа Object в файл | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Дабы избежать массовых ошибок и вызова 100500 messagebox
|
Re: Сохранить переменную типа Object в файл | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Для избежания вставок в коде CHR(13) и прочих...
Создай файл типа Consts.H
И своё ФИО там пропишешь и почту и многое чего еще. И в первых строка файлов PRG вставляй
У меня в главном файле H примерно 170 строк. А в некоторых проектах до десятка файлов H включено в проект. К визуальным классам тоже можно прицепить. |
Re: Сохранить переменную типа Object в файл | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Ты несколько проигнорил/непонял весь потенциал объявления функции со скобками.
Приведенный мной выше пример
более правильно расписать так.
То вот третий параметр без указания @ не понятно что должен в этой переменной вернуть новое значение. Хоть будет работать если и не указывать. Главное в вызывающем коде указать @ перед именем переменной. Ну и завершить наименованием метода объявлением типа возвращаемого значения офигенная вещь. Т.е. глядя только на название метода и видя возвращаемый тип, тебе уже многое ясно и не надо просматривать весь код. Естественно при малом коде она не столь эффективна. |
© 2000-2024 Fox Club  |