Автор | Сообщение |
|
| постоянный участник
|
Пост 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) Определения, есть ли переменная в этой секции ?
|
|
|
Ответов - 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)
|
|
|
|
| |
Пост N: 348
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.11.14 23:43. Заголовок: Andrey пишет: Опред..
Andrey пишет: цитата: | Определения есть ли секция |
| возьми с оазиса исходник старого клипперовского IniFile.prg там есть все * IniIni() * IniSave() * IniPut() * IniGet() * IniDel() * IniExists() * IniCount()
|
|
|
|
| постоянный участник
|
Пост N: 3708
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.11.14 20:17. Заголовок: Haz пишет: возьми с..
Haz пишет: цитата: | возьми с оазиса исходник старого клипперовского IniFile.prg там есть все |
| Да у меня есть работа с ини, включая блоки кода, массывы и т.д. - работающий и с русским языком. Просто хотелось бы для небольших программ на МиниГуи использовать стандартные функции. gfilatov2002 пишет: цитата: | Проверьте другой вариант этой функции: |
| Это заработало ! Спасибо ! А как насчет такой функции: 2) Определения, есть ли переменная в этой секции ?
|
|
|
|
| |
Пост 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
|
|
|
|
| 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 ) |
|
|
|
|
|
| постоянный участник
|
Пост 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.
|
|
|
|
| |
Пост N: 4261
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.11.14 23:09. Заголовок: Andrey Давай разбер..
Andrey Давай разберем простой INI и простой пример к нему. Ждем. PS Похоже ты не разобрался.
|
|
|
|
| постоянный участник
|
Пост N: 3710
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.11.14 00:40. Заголовок: Dima пишет: Похоже ..
|
|
|
|
| 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
|
|
|
|
| постоянный участник
|
Пост N: 3711
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.11.14 11:34. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Измените ее следующим образом |
| То что надо. Спасибо БОЛЬШОЕ ! Теперь можно полностью пользоваться функциями работы с ини-файлами из МиниГуи !
|
|
|
|
| постоянный участник
|
Пост N: 3756
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.11.14 22:54. Заголовок: Пример работы с ини-..
Пример работы с ини-файлами из МиниГуи отправил Григорию. Надеюсь он включит его в свою библиотеку. Подскажите до кучи, как кодовый блок записать в ини-файл ? Хотя бы в виде текстовой переменной....
|
|
|
|
|
| постоянный участник
|
Пост N: 3768
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.11.14 14:57. Заголовок: В программе использу..
В программе использую кодировку HB_CODEPAGE_RU1251. При записи в ини-файл пишу значения на русском. При считывании с ини-файла на экране кракозябы !!! Как лечить ?
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост N: 3773
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.11.14 23:17. Заголовок: SergKis пишет: cBlo..
SergKis пишет: цитата: | cBlock := GetIni...., 'MyBlock' ) |
| Самое трудное - WriteIni(..... ????
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост 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 держать в ини, чтобы измененять можно было. А при старте программы считывать (инициализировать) из ини-файла.
|
|
|
|
| постоянный участник
|
Пост N: 439
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.14 00:40. Заголовок: Andrey пишет:Да вот ..
Andrey пишет: так измени немного (можно др. массив): 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 ) }) или наоборот имена массивов
|
|
|
|
| постоянный участник
|
Пост N: 440
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.14 00:46. Заголовок: PS. это схема - не п..
PS. это схема - не прими за рабочий текст слишком много буков в ночи
|
|
|
|
| постоянный участник
|
Пост N: 3778
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.11.14 01:07. Заголовок: SergKis пишет: так ..
SergKis пишет: цитата: | так измени немного (можно др. массив): AADD(aClr2Usl, { "{ || DELETED() } , { nBlack, nGray }" } ) // black/gray |
| Понял. Но не хотелось отходить от стандарта. Григорий тоже предлагал так, а я долблюсь в закрытые ворота.
|
|
|
|
| постоянный участник
|
Пост 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 := {..., ..., ...} ...
|
|
|
|
| |
Пост N: 374
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.11.14 11:32. Заголовок: SergKis пишет: , и ..
SergKis пишет: цитата: | , и не понял цель записи в ini: |
| согласен, а еще в открытый INI пользователь ткнет букву в этом блоке и поседеешь пока поймешь что случились вдруг с рабочей прогой
|
|
|
|
|
| постоянный участник
|
Пост 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. При записи в ини-файл пишу значения на русском. При считывании с ини-файла на экране кракозябы !!! Как лечить ?
|
|
|
|
| |
Пост N: 375
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.11.14 12:10. Заголовок: Andrey пишет: В про..
Andrey пишет: цитата: | В программе использую кодировку HB_CODEPAGE_RU1251. При записи в ини-файл пишу значения на русском. При считывании с ини-файла на экране кракозябы !!! Как лечить ? |
| проверь в какой кодировке записано в INI hb_OemToAnsi() hb_AnsiToOem()
|
|
|
|
| постоянный участник
|
Пост N: 442
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.14 12:21. Заголовок: Andrey пишет:И я воо..
Andrey пишет: цитата: | И я вообще то свои ини-файлы кодирую, т.е. запрещаю юзерам там лазить. |
| может тебе лучше тогда использовать hrb, как настройку, а не ini. Вынес в prg файл функцию получил hrb и пользуйся ...
|
|
|
|
| постоянный участник
|
Пост 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 ...
|
|
|
Ответов - 25
, стр:
1
2
All
[только новые]
|
|