Существует множество способов хранения данных о настроке программы. Но при совместном использовании нескольких средств разработки удобно, чтобы все они были завязаны на INI-файл.
Общепринятая структура для INI-файлов:
[Секция] Ключ = Значение
Вот мой вариант функции для чтения файла такого типа:
function ReadIni(cFileName, cSection, cKey)
cError = 'INI_FILE_ERROR'
cSection = '[' + upper(cSection) + ']'
cKey = upper(alltrim(cKey))
lSectFound = .f.
if file(cFileName)
hFile = fopen(cFileName, 12)
if hFile < 0
messagebox('Не удалось открыть файл!')
return cError
else
do while not feof(hFile)
cBuff = fgets(hFile, 2048)
if alltrim(cBuff) = cSection or lSectFound
lSectFound = .t.
nPos = at('=', cBuff)
if nPos > 0
cCurKey = upper(alltrim(substr(cBuff, 1, nPos - 1)))
if cCurKey == cKey
fclose(hFile)
return substr(cBuff, nPos + 1)
endif
endif
nPos = at('[', cBuff)
if nPos > 0 and alltrim(cBuff) <> cSection
fclose(hFile)
return cError
endif
endif
enddo
fclose(hFile)
return cError
endif
else
messagebox('Ini файл не найден!')
return cError
endif
endfunc
Эта функция вернет либо требуемое значение, либо значение ошибки (переменная cError). Результат:

Вот так можно увидеть мой идентификатор (для KVA) в настройках.