FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9239
Вход
Создание объектов из .txt файла

В процессе сопровождения часто меняющегося приложения удобно делать изменения в текстовом файле, при этом, не затрагивая исходный код приложения. Тест и данные.


 
Прислал: Старый   Категория: Интерфейс


  
  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




 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (2.214)
Дополнения пользователей
Создание объектов из .txt файла
[+][?]
Technik07
03.02.06 13:02:47

Зачем как сложно и грубо!

1. Берем простой .ini-файл, где в качестве разделов имена классов, а параметры - свойства.

2. WIN32API позволяет за одно обращение прочитать имена всех параметров раздела 

3. Далее в цикле для каждого параметра читаем значение и устанавливаем/добавляем свойство обЪекта

4. Так же легко и сохранять объекты

Все очень просто, код минимален и не нужно выдумывать новые форматы файлов

С наилучшими пожеланиями!
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика