 |
ACTIVATE SCREEN
clea
IF .t.
text
Программа предназначена для создания объектов, содержащих предопределённые данные.
Причем, данные содержатся в текстовом файле, и в любой момент могут быть изменены.
Что удобно при сопровождении часто меняющегося приложения. Подготовьте config.txt
и тест готов к прогону.
Проверено на VFP 7.0
ОБЪЕКТ ВНАЧАЛЕ СОЗДАЕТСЯ, А ЗАТЕМ ИНИЦИАЛИЗИРУЕТСЯ
Ну не получилось это у меня, чтобы одним вызовом и объекты создать и
их проинициализироватью
See Also ОКАЗЫВАЕТСЯ. КЛАСС ВНАЧАЛЕ СОЗДАЕТСЯ, А ЗАТЕМ ИНИЦИАЛИЗИРУЕТСЯ
Содержимое файла 'c:\mysampl\others\config.txt' для теста:
#Телефон=581-21-85 - первая строка файла
#ВетВрач=Максименко М.А.
#E_mail=abel47@mail.ru
#Заставка=C:\mySampl\GRAPHICS\султан.JPG
#текст=Анализы
-----------------------------------------------------------------
Анализы:
_________________________________________________________________
Медицина:
_________________________________________________________________
... ...
#конец текста
#текст=Справка
С П Р А В К А
Дана _______________ Кличка ___________
Инструктор __________________________
... ... ...
#Конец текста
END - конец файла, последняя строка
endtext
endif
PUBLIC My_test
My_test = CREATEOBJECT('MyClass') && Построить объекты в памяти с именами из .txt файла
My_test.put_val() && Присвоить значения со значениями из .txt файла
WAIT WINDOW [ WAIT - для просмотра полученных значений в отладчике]
RELEASE my_test
DEFINE CLASS Variablic AS CUSTOM
Name = "Создание_переменной"
value = [Value_of_var]
ENDDEFINE
DEFINE CLASS MyClass AS Custom
name=[NewClass]
MyProperty = 'c:\mysampl\others\config.txt'
iTable = 0
xx=[ ]
namevalue=[]
objname = []
PROCEDURE init
LOCAL s,cn, objn, x, имя
this.itablE=FOPEN(this.MyProperty)
DO WHILE !FEOF(this.itablE)
this.xx = FGETS(this.itablE)
s = this.xx
IF LEFT(this.xx,1) # [#]
LOOP
ENDIF
if INLIST(s,'#конец','#Конец','#end','end','END')
loop
endif
if INLIST(s,'#МЕМО=','#Текст=','#Текст =','#текст=','#текст =')
objn = this.getvalue(s)
this.AddObject ( (objn), "Variablic" )
loop
endif
objn = this.getobjname(s)
this.AddObject ( (objn), "Variablic" )
ENDDO
=FCLOSE(this.itablE)
endproc
PROCEDURE destroy
endproc
PROCEDURE put_val
LOCAL s,cn, objn, x, имя
this.itablE=FOPEN(this.MyProperty) && пусть:
DO WHILE !FEOF(this.itablE) && #текст=ПОЛЕ21
this.xx = FGETS(this.itablE) && Значение строки 1 111111 111 11111111
s = this.xx && Значение строки 2 222222 2222
IF LEFT(this.xx,1) # [#] && ...
LOOP && #конец текста
ENDIF &&
if INLIST(s,'#МЕМО=','#Текст=','#Текст =','#текст=','#текст =')
objn = this.getvalue(s) && определено NAME объекта : #текст=ПОЛЕ21
имя =[my_test.]+objn+[.value] && Заготовлена строка my_test.ПОЛЕ21.value
&имя = [] && значение my_test.ПОЛЕ21.value ОЧИЩЕНО
s=FGETS(this.itablE) && прочитана первая строка значения
x = []
DO WHILE !FEOF(this.itablE) && цикл до конца значений строк поля NAME
IF FEOF(this.itablE) && т.е. для поля с именем ПОЛЕ21
EXIT
endif
if INLIST(s,'#конец','#Конец','#end','end','END')
EXIT
endif &&
x = &имя &&
&имя = x + ALLTRIM(s)+ CHR(13) && значение объекта ПОЛЕ21
s=FGETS(this.itablE) && формируется построчно
enddo
loop
ENDIF && Здесь приваюваются значения созданным переменным
objn = this.getobjname(s) && ВетВрач.value = "Максименко М.А."
имя =[my_test.]+objn+[.value] && E_mail.value = "abel47@mail.ru"
STORE this.getvalue(s) TO &имя && ...
ENDDO
=FCLOSE(this.itablE)
endproc
PROCEDURE getvalue && #namexxx = VALUExxxxxx...
LPARAMETERS s && ============
LOCAL l
l=ALLTRIM(SUBSTR(s, AT([=],s)+1 ))
retURN l
endproc
PROCEDURE getobjname && #NAMExxx... = VALUExxxxxx ...
LPARAMETERS s && ===========
LOCAL l
l=ALLTRIM(SUBSTR(s,2, AT([=],s)-2 ))
retURN l
endproc
ENDDEFINE
|
|