On-line: Haz, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 3707
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.11.14 23:32. Заголовок: Работа с ini файлами в MiniGui ?


Решил сделать отдельную ветку, искал и не нашел аналогичные темы.

Для работы с ини-файлами использую функции:
*--------------------------------------------------------*
STATIC Function GetIni( cSection, cEntry, cDefault, cFile )
RETURN GetPrivateProfileString(cSection, cEntry, cDefault, cFile )
*--------------------------------------------------------*
STATIC Function WriteIni( cSection, cEntry, cValue, cFile )
RETURN( WritePrivateProfileString( cSection, cEntry, cValue, cFile ) )

Для записи/чтения в ини для числа nNumeric использую:
WriteIni( cSection, cVal , HB_NToS(nNumeric), cFileIni )
nNumeric := VAL( GetIni( cSection , cVal , "0", cFileIni ) )


Для записи/чтения массива в ини - Григорий советует использовать:
WriteIni( cSection, cVal , ATOC(aDim), cFileIni )
aDim := CTOA( GetIni( cSection , cVal , '{}', cFileIni ) )


Нужны еще функции:
1) Определения есть ли секция [MySection] в ини файле ?
Григорий посоветовал:
Function IsINISection(cIniFile, cName)
Return ( cName $ _GetSectionNames(cIniFile) )

Что то не работает - выдает ошибку Error BASE/1109 Неверный аргумент: $

2) Определения, есть ли переменная в этой секции ?




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 25 , стр: 1 2 All [только новые]


moderator




Пост N: 682
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.11.14 23:43. Заголовок: Andrey пишет: Что т..


Andrey пишет:

 цитата:
Что то не работает - выдает ошибку



Проверьте другой вариант этой функции:

Function IsINISection(cIniFile, cName)
Return ( aScan( _GetSectionNames(cIniFile), cName ) > 0)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 348
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.11.14 23:43. Заголовок: Andrey пишет: Опред..


Andrey пишет:

 цитата:
Определения есть ли секция



возьми с оазиса исходник старого клипперовского IniFile.prg там есть все
* IniIni()
* IniSave()
* IniPut()
* IniGet()
* IniDel()
* IniExists()
* IniCount()


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3708
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.11.14 20:17. Заголовок: Haz пишет: возьми с..


Haz пишет:

 цитата:
возьми с оазиса исходник старого клипперовского IniFile.prg там есть все



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

gfilatov2002 пишет:

 цитата:
Проверьте другой вариант этой функции:



Это заработало ! Спасибо !

А как насчет такой функции: 2) Определения, есть ли переменная в этой секции ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4259
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.11.14 20:53. Заголовок: ret := hb_IniRead(&#..


 
ret := hb_IniRead("TEST.INI" )
if hb_HHasKey(ret,'ТВОЯ СЕКЦИЯ')
aHeader := ret['ТВОЯ СЕКЦИЯ']
if hb_hHaskey(aHeader, 'ТВОЯ ПЕРЕМЕННАЯ')
ret1:=aHeader['ТВОЯ ПЕРЕМЕННАЯ']
endif

endif


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 683
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.11.14 21:43. Заголовок: Andrey пишет: есть ..


Andrey пишет:

 цитата:
есть ли переменная в этой секции ?



 цитата:
 
Function IsVarINISection(cIniFile, cSecName, cName)
Return ( aScan( _GetSection(cSecName, cIniFile), {|x| UPPER(x[1]) == UPPER(cName)} ) > 0 )



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3709
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.11.14 22:55. Заголовок: Функции есть, но не ..


Функции есть, но не совсем то !!! Нужно жестко заданное условие.

Например:
Есть секция в ини-файле [Form_04], ищем секцию "Form_0" - существующая функция вернет .T.
так как действительно есть такое вхождение.

Есть переменная в ини:
TbrColor_11=A 76C 58Цвет текста неа......
Переменную "TbrColor_1" переименовал в "TbrColor_"

Ищем TbrColor_1 - существующая функция вернет тоже .T.




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4261
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.11.14 23:09. Заголовок: Andrey Давай разбер..


Andrey
Давай разберем простой INI и простой пример к нему.
Ждем.

PS
Похоже ты не разобрался.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3710
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.11.14 00:40. Заголовок: Dima пишет: Похоже ..


Dima пишет:

 цитата:
Похоже ты не разобрался.



Да, есть такое.... Функция IsVarINISection(cIniFile, cSecName, cName) - работает правильно !

А вот IsINISection(cIniFile, cName) - неправильно !

Пример здесь - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 684
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.11.14 11:20. Заголовок: Andrey пишет: А вот..


Andrey пишет:

 цитата:
А вот IsINISection(cIniFile, cName) - неправильно !


Измените ее следующим образом

 цитата:
Function IsINISection(cIniFile, cName)
Return ( aScan( _GetSectionNames(cIniFile), {|x| UPPER(x) == UPPER(cName)} ) > 0 )



либо используйте в этом модуле команду SET EXACT ON

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3711
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.11.14 11:34. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Измените ее следующим образом


То что надо. Спасибо БОЛЬШОЕ !

Теперь можно полностью пользоваться функциями работы с ини-файлами из МиниГуи !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3756
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.11.14 22:54. Заголовок: Пример работы с ини-..


Пример работы с ини-файлами из МиниГуи отправил Григорию. Надеюсь он включит его в свою библиотеку.

Подскажите до кучи, как кодовый блок записать в ини-файл ?
Хотя бы в виде текстовой переменной....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3768
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.11.14 14:57. Заголовок: В программе использу..


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

Как лечить ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 436
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.11.14 22:24. Заголовок: Andrey пишет:Подскаж..


Andrey пишет:
 цитата:
Подскажите до кучи, как кодовый блок записать в ини-файл ?


ini:
MyBlock = {|a,b,c| MyFunc(a,b,c) }

prg:
cBlock := GetIni...., 'MyBlock' )
If left(cBlock, 1) == '{' .and. right(cBlock, 1) == '}'
If '|' $ cBlock
bBlock := &( cBlock )
Else
aArray := &( cBlock )
EndIf
EndIf


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3773
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.11.14 23:17. Заголовок: SergKis пишет: cBlo..


SergKis пишет:

 цитата:
cBlock := GetIni...., 'MyBlock' )



Самое трудное - WriteIni(..... ????

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 437
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.11.14 23:54. Заголовок: Andrey пишет:Самое т..


Andrey пишет:
 цитата:
Самое трудное - WriteIni(..... ????


в чем ?
блок задаешь в prg строкой полюбому, вот и сохраняй ..., типа
Func Def()
массив преременных для работы - default
Return

если нет ini или секции - пишешь\создаешь в ini из Def()
потом в нужных местах читаешь из ini
если ini рабочий (у клиента) и ini из проекта (new версия) - при установке (смене) версии делаешь слияние и получаешь новый рабочий ini



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3776
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.14 00:27. Заголовок: ////////////////////..


////////////////////////////////////////////////////////////////////////////////////////
// Цвет текста/фона по условию для отображения строки таблицы
STATIC FUNCTION ListLinesColor(nText,nBack)
LOCAL nI, cPoleOne, cPoleTwo
LOCAL nBlack := MyRGB( BLACK ), nGray := MyRGB( GRAY )
LOCAL nRed := MyRGB( RED ), nBlue := MyRGB( BLUE )
LOCAL nYell := MyRGB( YELLOW), nWhit := MyRGB( WHITE )
LOCAL nRed2 := MyRGB( {235, 117, 123} ) // ярко красный

nWhit := IIF(nBack == nWhit, MyRGB(PURPLE), nWhit )
cPoleOne := ALIAS()+"->NEVENT"
cPoleTwo := ALIAS()+"->EVENT"
// -------------------------- условия показа строк ------------------------------------
AADD(aClr2Usl, { { || DELETED() } , { nBlack, nGray } } ) // black/gray
AADD(aClr2Usl, { { || &(cPoleOne) == 0 } , { nRed2, 255 } } ) // bright red/red
AADD(aClr2Usl, { { || &(cPoleOne) == 1 } , { nBack, nWhit } } ) // background/White
AADD(aClr2Usl, { { || &(cPoleOne) == 2 } , { nBack, nYell } } ) // background/yellow
AADD(aClr2Usl, { { || &(cPoleOne) == 3 } , { nBack, nRed } } ) // background/red - error!
AADD(aClr2Usl, { { || &(cPoleOne) == 4 } , { nBack, nGray } } ) // background/gray - removal!
AADD(aClr2Usl, { { || &(cPoleOne) == 5 } , { nBack, nBlue } } ) // background/blue
AADD(aClr2Usl, { { || LEN(ALLTRIM(&(cPoleTwo))) == 0 } , { nRed2, 128 } } ) // bright red/red
AADD(aClr2Usl, { { || 1 == 1 } , { nBack, nText } } ) // background/text - other records


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 439
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.11.14 00:40. Заголовок: Andrey пишет:Да вот ..


Andrey пишет:
 цитата:
Да вот хотел из prg


так измени немного (можно др. массив):
AADD(aClr2Usl, { "{ || DELETED() } , { nBlack, nGray }" } ) // black/gray
AADD(aClr2Usl, { "{ || &(cPoleOne) == 0 } , { nRed2, 255 }" } ) // bright red/red
...
AADD(aClr2Usl, { "{ || 1 == 1 } , { nBack, nText }" } ) // background/text - other records

WriteIni(..,..., 'aClr2Usl', hb_valtoexp(aClr2Usl))

aClr2UclBlok := array(len(aClr2Usl)) или aClr2Usl := &( GetIni(...,..., 'aClr2Usl') ) и
aeval(aClr2Usl, {|cV,nV| aClr2UclB[nV] := &( cV ) })
или наоборот имена массивов

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 440
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.11.14 00:46. Заголовок: PS. это схема - не п..


PS. это схема - не прими за рабочий текст слишком много буков в ночи


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3778
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.14 01:07. Заголовок: SergKis пишет: так ..


SergKis пишет:

 цитата:
так измени немного (можно др. массив):
AADD(aClr2Usl, { "{ || DELETED() } , { nBlack, nGray }" } ) // black/gray



Понял. Но не хотелось отходить от стандарта.
Григорий тоже предлагал так, а я долблюсь в закрытые ворота.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 441
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.11.14 11:14. Заголовок: Andrey пишет:Но не х..


Andrey пишет:
 цитата:
Но не хотелось отходить от стандарта


не понял о чем ты ..., и не понял цель записи в ini:
{ { || DELETED() } , { nBlack, nGray } } или
{ { || LEN(ALLTRIM(&(cPoleTwo))) == 0 } , { nRed2, 128 } }
через полгода, год будешь помнить что это ... и блок кода вряд ли будет меняться в выражении
в ini надо выносить настройки, которые править редактором или с окна настроек:
Black := {..., ..., ...}
Gray := {..., ..., ...}
Red := {..., ..., ...}
Red2 := {..., ..., ...}
...



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 374
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.11.14 11:32. Заголовок: SergKis пишет: , и ..


SergKis пишет:

 цитата:
, и не понял цель записи в ini:



согласен, а еще в открытый INI пользователь ткнет букву в этом блоке и поседеешь пока поймешь что случились вдруг с рабочей прогой

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3780
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.14 12:04. Заголовок: SergKis пишет: не п..


SergKis пишет:

 цитата:
не понял о чем ты


Да хотел тупо в ини файл записать типа: { { || LEN(ALLTRIM(&(cPoleTwo))) == 0 } , { nRed2, 128 } }
Нельзя так нельзя... Не особо страшно.
Haz пишет:

 цитата:
а еще в открытый INI пользователь ткнет букву в этом блоке


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

SergKis пишет:

 цитата:
в ini надо выносить настройки, которые править редактором или с окна настроек:


Согласен полностью. Да вот захотелось видно экстрима...

А как насчет этого вопроса:
В программе использую кодировку HB_CODEPAGE_RU1251.
При записи в ини-файл пишу значения на русском.
При считывании с ини-файла на экране кракозябы !!!
Как лечить ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 375
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.11.14 12:10. Заголовок: Andrey пишет: В про..


Andrey пишет:

 цитата:
В программе использую кодировку HB_CODEPAGE_RU1251.
При записи в ини-файл пишу значения на русском.
При считывании с ини-файла на экране кракозябы !!!
Как лечить ?



проверь в какой кодировке записано в INI

hb_OemToAnsi()
hb_AnsiToOem()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 442
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.11.14 12:21. Заголовок: Andrey пишет:И я воо..


Andrey пишет:
 цитата:
И я вообще то свои ини-файлы кодирую, т.е. запрещаю юзерам там лазить.


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 443
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.11.14 12:32. Заголовок: Andrey пишет:Как леч..


Andrey пишет:
 цитата:
Как лечить ?


я использую отдельные языковые ini в utf8 с BOM:
prog1.lv
[TXT]
Kod = Kods
Name = Nosaukums
NameMat = Materiāli
Kolvo = Daudzums
Adr = Adrese

prog1,ru
[TXT]
Kod = Код
Name = Наименование
NameMat = Материалы
Kolvo = Кол-во
Adr = Дом, адрес
City = Город

prog1.en
...


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 25 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 101
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет