Программа предназначена для создания объектов, содержащих предопределённые данные.
Причем, данные содержатся в текстовом файле, и в любой момент могут быть изменены.
Что удобно при сопровождении часто меняющегося приложения. Подготовьте config.txt
и тест готов к прогону.
Проверено на VFP 7.0
ОБЪЕКТ ВНАЧАЛЕ СОЗДАЕТСЯ, А ЗАТЕМ ИНИЦИАЛИЗИРУЕТСЯ
Ну не получилось это у меня, чтобы одним вызовом и объекты создать и
их проинициализироватью
See Also ОКАЗЫВАЕТСЯ. КЛАСС ВНАЧАЛЕ СОЗДАЕТСЯ, А ЗАТЕМ ИНИЦИАЛИЗИРУЕТСЯ
Содержимое файла 'c:mysamplothersconfig.txt' для теста:
#Телефон=581-21-85 - первая строка файла
#ВетВрач=Максименко М.А.
#E_mail=abel47@mail.ru
#Заставка=C:mySamplGRAPHICSсултан.JPG
#текст=Анализы
-----------------------------------------------------------------
Анализы:
_________________________________________________________________
Медицина:
_________________________________________________________________
... ...
#конец текста
#текст=Справка
С П Р А В К А
Дана _______________ Кличка ___________
Инструктор __________________________
... ... ...
#Конец текста
END - конец файла, последняя строка
endtext
endif
[code] 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:mysamplothersconfig.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[/code]