:: Visual Foxpro, Foxpro for DOS
Спор - что лучше INI или H-файлы
sphinx
Автор

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Hi all!

Начнем с того, что этот спор не имеет смысла. Потому что не имеет. Я использую и то, и то. Но меня наш коллега РЬЯНО убеждал в преимуществах H-файлов. Я их знаю если поискать лет 10 назад людям говорил в простом проекте - я бы сделал так. Зачем? Так по всему проекту константа автоматом проведет все твои изменения.
Наверное, во всем есть смысл, главное не до фанатизма.

Интересно, а если попробовать в самом стартовом модуле считать INI, пронести их через TEXT... ENDTEXT, собрать динамически в те же самые. Это вообще кто-то делал? Скорее всего смысла нет, я просто спросил. Я сторонник именно в ИНИ прописывать. Почему не ДВФ? Две причины. 1) В ИНИ продвинутый пользователь может сам поменять, с трудными - картинку, как надо засылаешь. И не надо ПЕРЕКОМПИЛИТЬ проект. Не панацея, но что можно и будет меняться с очень большой долей вероятности - в ИНИ. 2) Структура ИНИ может поломаться куда проще, чем обычный текстовый файл. Да, есть процедура Максимова - по репайрингу ДБФ. Но она ведь поможет не всегда, увы. Текст - надежнее. Понятно, с продвинутыми я бы в ХМЛ, особенно если структура непростая.


В H-файле у мну секции ИНИ-файла. Автомат их обходит, ему даже не важно, какой новый параметр прописан, никакого Copy-Paste нет, сразу в проекте можно обращаться.

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

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


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 05.08.23 03:10
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Taran

Сообщений: 13740
Откуда: Красноярск
Дата регистрации: 16.01.2008
Так у них разное назначение и возможности.
Во время компиляции названия констант заменятся на значения из файла H. После этого хоть потоп, хоть меняй значение, хоть нет.
А INI для оперативного изменения, хранения и чтения свежих данных.



Исправлено 1 раз(а). Последнее : Taran, 05.08.23 12:39
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
sphinx
Автор

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Ты точно все внимательно прочитал? Я спрашивал, что ЛУЧШЕ?Соберись, будь бодр.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Владимир Максимов

Сообщений: 14123
Откуда: Москва
Дата регистрации: 02.09.2000
sphinx
Ты точно все внимательно прочитал? Я спрашивал, что ЛУЧШЕ?Соберись, будь бодр.

Извини, но я тоже не понял вопроса. Это как сравнивать теплое с мягким. Несопоставимые величины. Прежде, чем их сравнивать, необходимо привести в сопоставимое состояние

Что лучше ДЛЯ ЧЕГО? Какую задачу решаем?
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
sphinx
Автор

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Ну я бы такую условную.

Есть условно-постоянная величина. Пусть 1024.
Условно говоря, на стадии проекта мы считаем, что она постоянная. Но... завтра что-то поменялось, новый закон вышел, или другая новость. И МОЖЕ БЫТЬ она поменяется.

Вариант 1.
Прописали в H-файл. Это же константа. И у нас нет машины времени, не знаем, будет ли ситуация, чтобы ее поменять. Для нас на текущий момент это КОНСТАНТА. Пишем.

Вариант 2.
Я хитрый (не, я больше честный и добрый), и не верю в НЕИЗМЕНЯЕМОСТЬ констант. И пишу ее в ИНИ-файл.
ПОЧЕМУ? Потому что взял и поменял. И не надо пересобирать проект (скажите - и что ТРУДНО? Нет, не трудно. Но я ОДИН разработчик многих проектов. И попал в положение, когда не могу ПЕРЕСОБРАТЬ. Все, стоим и деньги теряем? Так?

Но есть ТРЕТИЙ ВАРИАНТ (безумный, сам придумал в момент написания)
А взять и скрестить. То есть вычитываем параметр. Загоняем в конструкцию вида TEXT... ENDTEXT... и пустим через EXECSCRIPT() (ну или макро, если кто их любит и никак без них).


ПЛЮС - вроде та же константа... но управляемая извне. Оригинально? Сейчас разнесу в пыль. Наши умеют.

Не надо писать "ВСЕ ЗАВИСТ от..." Придумал пример.


P.S. Все использую, разумность определяю сам, ибо критерии субъективно. А проект или работает, или не работает. Стабильно, или нет.
Лес рук, у кого работает криво, или вообще не работает.


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 05.08.23 23:43
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
akvvohinc

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
А взять и скрестить. То есть вычитываем параметр. Загоняем в конструкцию вида TEXT... ENDTEXT... и пустим через EXECSCRIPT() (ну или макро, если кто их любит и никак без них).
Непонятно.

После "вычитывания параметра" его значение хранится, допустим, в переменной, которой ты и пользуешься в программе.
Для чего его загонять в конструкцию TEXT, которую затем выполнять через EXECSCRIPT() ?
Что ты получаешь после исполнения сгенерированного кода?

Допустим, где-то в программе у тебя сейчас стоит
Val = 1024

Ты хочешь заменить эту константу, чтобы можно было менять значение, не пересобирая EXE.
Кладешь в INI или куда-то ещё пару "имя - значение", читаешь значение по имени, загоняешь его между TEXT... ENDTEXT.
Что происходит дальше?
Как в переменную Val попадет 1024 в ТРЕТЬЕМ ВАРИАНТЕ?

Приведи код, которым ты собираешься заменить исходную команду
Val = 1024



Исправлено 1 раз(а). Последнее : akvvohinc, 06.08.23 01:17
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
ABB

Сообщений: 155
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Можно решить эту задачу добавив несвязанную с базой свободную таблицу. В нее можно записать все что угодно



Исправлено 1 раз(а). Последнее : ABB, 06.08.23 14:51
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
akvvohinc

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Можно решить эту задачу добавив несвязанную с базой свободную таблицу.
Конечно, можно - этот тот же INI, но в другом формате.
Просто если иметь в виду его ручную корректировку пользователями, то с текстовым файлом им работать проще.
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
sphinx
Автор

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
akvvohinc
Цитата:
Можно решить эту задачу добавив несвязанную с базой свободную таблицу.
Конечно, можно - этот тот же INI, но в другом формате.
Просто если иметь в виду его ручную корректировку пользователями, то с текстовым файлом им работать проще.

Вот! Сергей зрит в корень. Что-то и в таблице, если системное, и пользователю сложно это поднимать. Но простые настройки - там.




------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
sphinx
Автор

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Будет время - нарисую, как я вижу. Ну хрень может быть. Вычитывать H-константы из ИНИ. Ну бред - бросим. Я исследователь. Ну, не как Вадик, далеко... Но все же.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Владимир Максимов

Сообщений: 14123
Откуда: Москва
Дата регистрации: 02.09.2000
akvvohinc
Цитата:
А взять и скрестить. То есть вычитываем параметр. Загоняем в конструкцию вида TEXT... ENDTEXT... и пустим через EXECSCRIPT() (ну или макро, если кто их любит и никак без них).
Непонятно.

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

Val = #DEF_VAL;

Вопрос в том, что записано в макросе? Может быть конкретное значение. А может быть и некая функция, которая будет обращаться к некоему хранилищу. В частности, в качестве хранилища может выступать ini-файл, xml, dbf и т.п.

Правда, не очень понятно, почему не написать эту функцию напрямую. Зачем с макросом-то связываться?
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
akvvohinc

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Владимир Максимов
Если я правильно понял сам вопрос, то сейчас в коде записано
Val = #DEF_VAL;

Я понял иначе:
Все так или иначе этот вопрос уже давно решили, в том числе и Саша.
А поэтому неважно, что у него сейчас написано в коде.

Но вот какой вариант его заинтересовал:
sphinx
Интересно, а если попробовать в самом стартовом модуле считать INI, пронести их через TEXT... ENDTEXT, собрать динамически...

Естественно, прочитать INI-файл, записать прочитанное в PRG, который и выполнять через EXECSCRIPT, можно.

А не понял я, чего мы хотим таким образом добиться (каких дивидендов?) по сравнению с обычной работой с INI-файлом.

PS
А Val = #DEF_VAL; в его коде быть не должно - решетка в таком контексте - это оператор сравнения "не равно" - получим Syntax Error.



Исправлено 2 раз(а). Последнее : akvvohinc, 07.08.23 04:19
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Владимир Максимов

Сообщений: 14123
Откуда: Москва
Дата регистрации: 02.09.2000
Ну, цель - замена значение константы в коде. Только я из описания не понял, что именно происходит?

1. Если константа задается макросом, то проект надо пересобирать после изменения макроса (H-файла)
2. Если не хотим пересобирать проект, то ?

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

Т.е. код выглядит так?

val = 1024 && значение из H-файла
* Если значение есть в INI, то взять значение из INI
if existInINI()
val = getFromINI()
endif

Т.е. в H-файле значение по умолчанию, а в INI - реальное значение, если необходимо?
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
akvvohinc

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Владимир Максимов
Т.е. в H-файле значение по умолчанию, а в INI - реальное значение, если необходимо?
Ну, так это и есть обычная работа с использованием INI-файлов - нечто имеет дефолтное значение, которое может быть заменено на заданное в INI:
#DEFINE _PARM1 1024
val = getFromINI(<parm1name>, _PARM1)

Но для этого не требуется ни TEXT...ENDTEXT, ни EXECSCRIPT().

Можно "упростить" код даже так:
#DEFINE _PARM1 getFromINI("parm1", 1024)
val = _PARM1



Исправлено 2 раз(а). Последнее : akvvohinc, 07.08.23 17:56
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
sphinx
Автор

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
*-- Можно "упростить" код даже так:
#DEFINE _PARM1 getFromINI("parm1", 1024)
val = _PARM1




------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 07.08.23 21:51
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Артём

Сообщений: 136
Дата регистрации: 23.04.2001
я настройки в DBF храню. то есть это ini
поля name c(10), type c(1), cvalue c(30), comment c(20)

имена подурнее выдумываю. типа VMPROG666

в начале программы все переменные объявляю public

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


PROCEDURE Read_Vars
ACTIVATE SCREEN
IF !USED('shop_vars')
USE &cVarPath.shop_vars IN 0
ENDIF
SELECT shop_vars
GO TOP
DO WHILE !EOF()
s1000 = 'PUBLIC '+ name
&s1000
DO CASE
CASE type = 'N'
s1000 = name + '='+ ALLTRIM( cValue)
CASE type = 'L'
s1000 = name + '='+ ALLTRIM( cValue)
CASE type = 'C'
s1000 = name + '="'+ ALLTRIM( cValue) + '"'
OTHERWISE
WAIT WINDOW 'unknown var type'
ENDCASE
&s1000
? s1000
SKIP
ENDDO
* USE
RETURN
ENDPROC

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



Исправлено 4 раз(а). Последнее : Артём, 14.08.23 22:52
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Taran

Сообщений: 13740
Откуда: Красноярск
Дата регистрации: 16.01.2008
А куда у тебя программа установится по дефолту? Будут ли там права на создание, запись файлов, фбв, ини и пр...?
Ну и про public переменные... ну... х.з.
Если семечек мешок посчитать или на бюджете мозг епать как оффа. Тогда да..
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
akvvohinc

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Артём
CASE type = 'C'
s1000 = name + '="'+ ALLTRIM( cValue) + '"'
Ненадежный способ, исключающий возможность иметь двойную кавычку внутри значения.
Проще записывать значения параметров в переменные напрямую - нет необходимости в предварительном конструировании команды с последующим использованием макро:
STORE ALLTRIM(cValue) TO (name)

И вообще все без исключения макро в вашем коде не являются необходимыми - лучше обойтись без них.

DO WHILE !EOF()+SKIP
- наследие древних версий. Не уверен, но, по-моему, уже в FoxPro 1.0 появился SCAN.
Ratings: 0 negative/2 positive
Re: Спор - что лучше INI или H-файлы
of63

Сообщений: 25599
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> или на бюджете мозг епать как оффа

Злое: Я тебе мозк заепал? Я пашу как пчелка, коды какие-то предлагаю, ворошу музло застаерелое (нового-то нет), не в коня корм. Не в это болото... точнее другого болота мне лень искать.
Ratings: 0 negative/0 positive
Re: Спор - что лучше INI или H-файлы
Vedmak

Сообщений: 6007
Откуда: CiTY
Дата регистрации: 30.10.2003
Любое решение, из предложенной вилки, является идеальным только в узком круге задач.

#define cd_logic_yes 1
#define cd_logic_no 0
#define cd_sex_male 1
#define cd_sex_female 2

Если вы найдете 3+ вариант к каждому из указанных вариантов, то внешняя кодировка из базы станет уместна ))). Какие там варианты гендерной принадлежности на местах придумают мы не будем знать и зависеть )))

#define right_system 1000
#define right_admin right_system + 10
#define right_role right_system + 20
#define right_role_add right_role + 1
#define right_role_upd right_role + 2
#define right_role_del right_role + 3
#define right_user right_system + 30
#define right_user_add right_user + 1
#define right_user_upd right_user + 2
#define right_user_del right_user + 3
#define right_country right_system + 70
#define right_country_add right_country + 1
#define right_country_upd right_country + 2
#define right_country_del right_country + 3
#define right_region right_system + 80
#define right_region_add right_region + 1
#define right_region_upd right_region + 2
#define right_region_del right_region + 3
#define right_city right_system + 90
#define right_city_add right_city + 1
#define right_city_upd right_city + 2
#define right_city_del right_city + 3

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

#define err_ok 0
#define err_app 100
#define err_sql 700
#define err_sql_connect_failed err_sql+1
#define err_sql_disconnect_failed err_sql+2
#define err_sql_query_failed err_sql+3
#define err_sql_trn_commit_failed err_sql+4
#define err_sql_put_file_failed err_sql+5
#define err_sql_get_file_failed err_sql+6
#define err_sql_connect_lost err_sql+7
#define err_sql_auth_failed err_sql+8
#define err_sql_trn_rollback_failed err_sql+9
#define err_sql_trn_begin_failed err_sql+10
#define err_sql_trn_end_failed err_sql+11

Формальная типизация ошибок тоже ни разу не справочник из БД, т.к. работает на корневых понятиях приложения. И логирование на эти константы завязывается.

А вот здесь кодификатор типов документа. Как бы вопрос коллеги @Sphinx понятен: а почему клиент в такой справочник не может забить/дополнить свои значения? Сможет конечно, но внутренняя логика приложения пользовательский мусор не позволит использовать. Если N раз из такого файла удалить "паспорт", то как приложение узнает тип документа который надо выбрать для отчета в котором требуется именно паспорт?

#define cd_document_passport 1
#define cd_document_id 2
#define cd_document_license 3
#define cd_document_diplome 4

Я думаю такие кодификаторы только через обновление приложения на основе подписки.

INI? Да вы устанете разгребать мусор в инишниках на 30+ рабочих местах которые тамошние админы наплодят по недомыслию. Поверьте, у меня в компании два клиента с сеткой АЗС 300+ станций (остальные от 20+). На каждой из них 1-3 компьютера с приложением. Тупые локальные техники постоянно что-то напортачат на местах. А вы про легко доступные инишники! Никакой свободы и вы сами, как разработчики, станете спать без нервных дёрганий на звонки и сообщения.

Не открываете двери возможностей которые не сможете закрыть без черезмерной траты сил, времени и здоровья.

Извините за многословие.


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 29.08.23 21:25
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика