Запомнить последнее введенное значение
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Запомнить последнее введенное значение

Запомнить последнее введенное значение

Ответ
Поиск в этой теме
Непрочитано 20.09.2010, 17:52 #1
Запомнить последнее введенное значение
Айнар
 
Москау
Регистрация: 16.05.2007
Сообщений: 63

Подскажите пожалуйста как сделать в ЛИСПе, чтобы при следующем вызове команды по умолчанию выводился по умолчанию параметр введенный ранее. типа вот этого: "Specify fillet radius <0.0000>:"
Просмотров: 9239
 
Непрочитано 20.09.2010, 19:08
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Объявляй переменную глобально или пиши в реестр...
gomer вне форума  
 
Непрочитано 20.09.2010, 20:04
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Айнар Посмотреть сообщение
Подскажите пожалуйста как сделать в ЛИСПе, чтобы при следующем вызове команды по умолчанию выводился по умолчанию параметр введенный ранее. типа вот этого: "Specify fillet radius <0.0000>:"
Смотря что понимается под "ранее":
1. "Ранее" в текущем сеансе работы
2. "Ранее" в предыдущих сеансах работы

Если (1), то gomer прав насчёт использования глобальной переменной.
Если (2), то хранить подобные настройки в реестре - не лучшая идея, под это дело лучше бы подошёл xml-файл (имхо).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.09.2010, 07:10
#4
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
Объявляй переменную глобально или пиши в реестр...
Ты думаешь, если бы Айнар, знал о том что такое глобальные переменные или тем более реестр, он бы задал такой вопрос?
Цитата:
Сообщение от AutoLISP и Visual LISP в среде AutoCAD

К локальным переменным относятся переменные, имена которых заданы при описании функций либо в перечне аргументов, либо в перечне рабочих переменных. Такие переменные существуют только внутри функции, в которой они определены, и их значение не передаются наружу.
Остальные переменные, который не являются локальными, считаются глобальными, и им отводиться специальное место в именном пространстве текущего документа и в текущем сеансе работы
Для ввода предыдущего значения, по-умолчанию
[IMG]http://s42.***********/i095/1009/48/f34422ffe6be.gif[/IMG]
, я использую конструкцию вот такого типа:
Код:
[Выделить все]
(defun c:test (/ entered_value)
  (setq	Einar_last_entered_value_test
	 (if Einar_last_entered_value_test 
	   Einar_last_entered_value_test 
	   0 
	 )
	entered_value
	 (getreal
	   (strcat
	     "\nВведите значение <"
	     (rtos Einar_last_entered_value_test)
	     ">: "
	   )
	 )
	entered_value
	 (if entered_value
	   entered_value
	   Einar_last_entered_value_test
	 )
	Einar_last_entered_value_test
	 entered_value
  )
)
. где entered_value - локальная переменная, Einar_last_entered_value_test - глобальная переменная.

Цитата:
Сообщение от hwd Посмотреть сообщение
лучше бы подошёл xml-файл (имхо).
Можно по подробнее, давно хочу чтоб "ранее" было не только в текущем
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 21.09.2010 в 08:32.
Disney вне форума  
 
Автор темы   Непрочитано 21.09.2010, 09:56
#5
Айнар


 
Регистрация: 16.05.2007
Москау
Сообщений: 63


Нужно "Ранее" в предыдущих сеансах работы
Айнар вне форума  
 
Непрочитано 21.09.2010, 10:15
#6
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Цитата:
Нужно "Ранее" в предыдущих сеансах работы
Для таких вещей я использую простые текстовые файлы используя функцию (open "......" "w") и (open "......" "r"). может не красиво, но работает.

В качестве основы для записи и считывания файла взял команду Appload из R13, реализованную Lisp-ом. (см. вложение)
Вложения
Тип файла: zip appload.zip (6.3 Кб, 75 просмотров)
E-degtyarev вне форума  
 
Непрочитано 21.09.2010, 10:20
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


http://forum.dwg.ru/showthread.php?t...E0%ED%ED%FB%F5
Do$ вне форума  
 
Непрочитано 21.09.2010, 16:19 Пример работы с XML
1 | #8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Disney Посмотреть сообщение
Цитата:
Сообщение от hwd
Смотря что понимается под "ранее":
1. "Ранее" в текущем сеансе работы
2. "Ранее" в предыдущих сеансах работы

...лучше бы подошёл xml-файл (имхо).
Можно по подробнее, давно хочу чтоб "ранее" было не только в текущем
Можно. Озвученный видео-пример с исходниками разместил здесь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 10:25
#9
EfremenkoDO


 
Регистрация: 24.12.2009
Санкт-Петербург
Сообщений: 59
<phrase 1=


На мой взгляд, лучше всего работать с ini файлами, а не с реестром, особенно при использовании малого количества информации.
вот к примеру две функции чтение/запись в ini.
Код:
[Выделить все]
;;;FileName 	- имя файл ini
;;;Section 	- секция ini
;;;key 		- ключ ini
;;;Default	- значение по умолчанию (если не обнаружит значения в фале)
(defun read-ini	(FileName Section Key Default / IniSection str)
  (setq File (open FileName "r"))
  (if (= File nil)
    (progn
      Default
    )
    (progn
      (setq IniSection (strcat "[" (strcase Section) "]"))
      (setq str (read-line File))
      (setq temp T)
      (while (and (/= str "///")
		  (/= (strcase str) IniSection)
	     )

	(progn
	  (setq str (read-line File))
	  (if (= str nil)
	    (setq str "///")
	  )
	)
      )
      (if (= str "///")
	(progn Default)

	(progn
	  (setq str (read-line File))
	  (if (= str nil)
	    (setq str "///")
	  )
	  (while

	    (and (/= str "///")
		 (/= (strcase (substr str 1 (vl-string-search "=" str)))
		     (strcase Key)
		 )
		 (/= (substr str 1 1) "[")

	    )
	     (progn
	       (setq str (read-line File))
	       (if (= str nil)
		 (setq str "///")
	       )
	     )
	  )
	  (close File)
	  (if (= (strcase (substr str 1 (vl-string-search "=" str)))
		 (strcase Key)
	      )
	    (progn
	      (setq str (substr str (+ 2 (vl-string-search "=" str))))
	      str
	    )
	    (progn Default)
	  )
	)
      )
    )
  )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;запись в ини

(defun write-ini (FileName   Section	Key	   Value
		  /	     IniSection	str	   Lstr
		  insertion  elem	curSection
		 )
  (setq insertion :vlax-false)
  (setq File (open FileName "r"))

  (if (= File nil)
    (progn
      (setq Lstr
	     (append Lstr (list (strcat "[" (strcase Section) "]")))
      )
      (setq Lstr (append Lstr (list (strcat Key "=" Value))))
    )
    (progn

      (setq str (read-line File))
      (if (= (substr str 1 1) "[")
	(setq curSection (strcase str))
      )

      (while (/= str nil)
	(progn
	  (if
	    (and (/= (strcase (substr str 1 (vl-string-search "=" str)))
		     (strcase Key)
		 )
		 (= (strcase curSection)
		    (strcat "[" (strcase Section) "]")
		 )
	    )
	     (progn
	       (setq Lstr (append Lstr (list str)))
	     )
	     (progn (if	(/= (strcase curSection)
			    (strcat "[" (strcase Section) "]")
			)
		      (setq Lstr (append Lstr (list str)))
		    )
	     )
	  )


	  (if (= (strcase str) (strcat "[" (strcase Section) "]"))
	    (progn
	      (setq Lstr (append Lstr (list (strcat Key "=" Value))))
	      (setq insertion :vlax-true)
	    )

	  )
	  (setq str (read-line File))
	  (if (/= str nil)
	    (if	(= (substr str 1 1) "[")
	      (setq curSection (strcase str))
	    )
	  )
	)
      )


      (if (= insertion :vlax-false)
	(progn
	  (setq	Lstr
		 (append Lstr (list (strcat "[" (strcase Section) "]")))
	  )
	  (setq Lstr (append Lstr (list (strcat Key "=" Value))))
	)
      )
      (close File)
    )
  )

  (setq File (open FileName "w"))
  (if (/= File nil)
    (progn
      (foreach elem Lstr (write-line elem File))
    )
  )
  (close File)
)
EfremenkoDO вне форума  
 
Непрочитано 01.10.2010, 10:43
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от EfremenkoDO Посмотреть сообщение
На мой взгляд, лучше всего работать с ini файлами, а не с реестром, особенно при использовании малого количества информации.
"Работать" и "хранить свои настройки" - это не одно и то же. Работать нужно уметь и с реестром, поскольку AutoCAD много чего хранит именно в нём. Если говорить о том, в каких файлах хранить свою информацию, то возможно (но не обязательно) следует учитывать возможности языка, на котором программист пишет. Если кто-то пишет на языке, который не имеет в своём арсенале функций по работе с xml, но имеет функции для работы с текстовыми файлами, то возможно, что такому разработчику будет удобней работать с ini-файлом (хотя, честно говоря, я не вижу совершенно никаких трудностей в том, чтобы с тем же успехом создавать xml). Если же в языке функционал для работы с xml имеется, то лучше использовать xml, а не ini, поскольку возможно, что в дальнейшем с файлом ваших настроек потребуется работать из внешних приложений или же тот, кто будет писать код - будет писать его на языке, умеющем работать с xml. Если это будет ini-файл, то программисту придётся тратить своё время на написание парсера. А ежели это будет xml - этого делать не придётся.

Вообще существует аксиома: xml - это универсальный формат хранения/передачи данных. Любой серьёзный язык программирования имеет в своём арсенале инструменты по работе с xml, а следовательно такой файл будет легко прочитан и изменён (при необходимости).

Если коротко - я против ini-файлов.

Offtop: з.ы. Хотя на данном форуме преобладают лиспописатели, которым вопросы совместимости и удобства поддержки, к сожалению побоку.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 10:56
#11
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Если коротко - я против ini-файлов.
стоит учесть что за данные планируется хранить, если не особо структурированные, например несколько не связаных значений - зачем xml?

Если коротко - я против тотальной подсадки на xml. а за пихание всякой лабуды в реестр - нужно руки отрывать. иногда плакать хочется глядя в regedit... зачем это там?
zamtmn вне форума  
 
Непрочитано 01.10.2010, 11:01
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


ИМХО: ini превосходно подходит для одноуровневой организации информации.
xml - для сложноструктурированной.
Но и то, и другое (по крайней мере с точки зрения лиспа) требует обращения к файлам, то есть достаточно медленные операции. Мне кажется (подробных исследований не проводил), что доступ к реестру будет осуществляться быстрее.
Как бы то ни было, все равно хранение информации надо продумывать - любой механизм можно угробить
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 11:02
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
если не особо структурированные, например несколько не связаных значений - зачем xml?
имхо - для порядка. Что произойдёт, если юзер подправит такой ini-файл, случайно поменяв местами две строки? В xml можно автоматически проверять структуру файла и его содержимое на корректность (с помощью xsd-схем). А как вы проверите ini-файл? Можно конечно проверить, но для этого нужно будет писать опять же кучу кода.
Цитата:
любой механизм можно угробить
Чтобы этого не случилось, как раз и существуют xsd-схемы. По ним можно даже сгенерировать нужный xml-файл с нуля.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 11:03
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Цитата:
Сообщение от hwd Посмотреть сообщение
Что произойдёт, если юзер подправит такой ini-файл, случайно поменяв местами две строки?
А ничего Если, конечно, реализация чтения-записи грамотная
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 11:05
#15
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А ничего Если, конечно, реализация чтения-записи грамотная
А если он укажет не допустимое значение? Тоже ничего, если "грамотная реализация". Но ты упускаешь один момент - эту реализацию нужно писать. В случае использования xml - эта реализация уже есть в виде xsd-схем.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 11:09
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Андрей, ты про схемы-то не это, не тово... В общем, не надо
Для затравки несколько функций, которые я использую для работы с ini-файлами (используется некоторое количество библиотечных функций, но суть от этого меняется мало).
Вложения
Тип файла: lsp _kpblc-ini-datas-read.LSP (3.0 Кб, 56 просмотров)
Тип файла: lsp _kpblc-ini-datas-write.LSP (4.7 Кб, 54 просмотров)
Тип файла: lsp _kpblc-ini-read-value.LSP (755 байт, 58 просмотров)
Тип файла: lsp _kpblc-ini-write-value.LSP (883 байт, 56 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 11:13
#17
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
ты про схемы-то не это, не тово... В общем, не надо
поясни
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 11:15
#18
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Удалено
Do$ вне форума  
 
Непрочитано 01.10.2010, 11:16
#19
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Тоже ничего, если "грамотная реализация"
Без грамотной реализации и xml не поможет.
Я не спорю xml - индустриальный стандарт... но тут в основном не професионалы. Есть некоторый предел сложности данных до которого xml - излишество
zamtmn вне форума  
 
Непрочитано 01.10.2010, 11:26
#20
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


С INI-файлом ничего не произойдет, даже если поменять местами строчки. Вручную. И с юзером ничего не произойдет. Правильная программа (не такая примитивная как в #9) прочитает информацию. И хранить в INI можно структурированную (несколько уровней) информацию. Достаточно задавать соответствующие имена секций и переменных.

А вот с XML, при всех его несомненных преимуществах для многих целей все гораздо сложнее. Требования к синтаксису более строгие. Жестокие! XML должен быть и valid и well-formatted. Да еще, возможно, соответствовать какой-нибудь XSD-схеме.

И "что произойдет если юзер подправит такой XML-файл"? Даже не меняя местами строки? XML от таких правок также ничем не защищен.

Но для работы с XML необходимы дополнительные парсеры, причем гораздо более сложные, чем для INI. Вот hwd всё время на XML напирает потому что работает с .NET. А посади его в другую среду? Хотя бы в "чистый WIN-api" с написанием программы в "Блокноте"? Вот и кончился весь XML.

Поэтому все неоднозначно. В случаях с настройками, например "последним значением" нет смысла применять сложные решения.

Цитата:
за пихание всякой лабуды в реестр - нужно руки отрывать. иногда плакать хочется глядя в regedit... зачем это там?
Обычные рассуждения начинающих программистов. Которые, типа, пишут программы, круче чем вся Microsoft. Плакать хочется и пацталом валяться.

Руки им надо отрывать за то, что лезут с regedit.
ShaggyDoc вне форума  
 
Непрочитано 01.10.2010, 11:27
#21
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Для затравки
Загрузил файл _kpblc-ini-datas-read.LSP. Смотрю функцию _kpblc-ini-datas-read
Цитата:
* Параметры вызова:
* file имя файла. Если файла нет, возвращает nil

Не всё выслал?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 11:29
#22
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Конечно, не все. Я выложил для анализа кода (ну и надеюсь, что получу рекомендации по улучшению )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 11:30
#23
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Конечно, не все. Я выложил для анализа кода (ну и надеюсь, что получу рекомендации по улучшению кода )
я набросал простой ini-файл и хотел проверить как работает твоя функция. Смысл мне анализировать, когда я не знаю лиспа? Хотел проверить корректность возвращаемого результата.

Как видим - получена ошибка.
Содержимое тестового ini-файла:

Код:
[Выделить все]
[файлы настроек]
localsettingsfile=C:\Documents and Settings\All Users\Application Data\GpsmCAD\LocalSettings.xml
[каталоги]
[файлы библиотек]
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 11:32
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Уговорил. Попробую все в один файл засунуть... Дай только примерно часа 2 - срочной работы немеряно.
Вложения
Тип файла: lsp kpblc-ini-full.LSP (13.3 Кб, 65 просмотров)
Тип файла: rar kpblc-ini-full(fas).rar (4.6 Кб, 56 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 01.10.2010 в 11:42.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 11:35
#25
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Уговорил. Попробую все в один файл засунуть... Дай только примерно часа 2 - срочной работы немеряно.
да ты можешь просто скормить этой функции то, что я показал в ini-файле.
Судя по тому, что не находится функция, выдающая отчёт об ошибке - данный ini-файл не будет обработан корректно даже если ты и засунешь ту функцию в lisp-файл.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 11:35
#26
EfremenkoDO


 
Регистрация: 24.12.2009
Санкт-Петербург
Сообщений: 59
<phrase 1=


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Правильная программа (не такая примитивная как в #9) прочитает информацию
Э... попрошу не оскорблять код. Может и примитивно, зато работает! читает и пишет.
EfremenkoDO вне форума  
 
Непрочитано 01.10.2010, 11:43
#27
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


В #24 добавил полностью работающие коды (lsp и fas)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 11:45
#28
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
И "что произойдет если юзер подправит такой XML-файл"? Даже не меняя местами строки? XML от таких правок также ничем не защищен.
А произойдёт то, что программа выдаст сообщение о том, что файл настроек повреждён - и сразу будет понятно в чём дело. Не будет скрытой ошибки, которая может в последствии проявляться в виде неправильных расчётов или т.п.
Цитата:
Но для работы с XML необходимы дополнительные парсеры, причем гораздо более сложные, чем для INI.
Эти парсеры уже давно написаны (не нужно изобретать велосипед) и их можно использовать из того же лиспа или др. языка программирования. Всегда лучше использовать уже имеющееся проверенное решение, чем писать с нуля свою реализацию.
Цитата:
А посади его в другую среду? Хотя бы в "чистый WIN-api" с написанием программы в "Блокноте"? Вот и кончился весь XML.
Давайте не будем обсуждать сферического коня в вакууме. Мы живём в то время, когда существует множество удобных технологий и ориентироваться на ситуации вроде "а что, если у тебя будет только мэнфрэйм и перфокарты" - это глупо (имхо). У каждого из нас всегда будет под рукой то программное обеспечение, которое нам нужно для работы.
Цитата:
с написанием программы в "Блокноте"
Писать .net-код можно и в блокноте, скомпилировав затем исходники с помощью csc.exe. Это уж если кому охота поизвращаться....
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 01.10.2010 в 11:59.
hwd вне форума  
 
Непрочитано 01.10.2010, 11:52
#29
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
Обычные рассуждения начинающих программистов. Которые, типа, пишут программы, круче чем вся Microsoft. Плакать хочется и пацталом валяться.

Руки им надо отрывать за то, что лезут с regedit.
Ну вы видимо не много программ устанавливаете из интереса. я этим грешен...

Случай из жизни: Звонит коллега - "ВСЁ ПРОПАЛО". выполнял срочный заказ пользуясь одним небезизвестным и недешовым электротехническим сапром (последние технологии от микрософта, проект - база данных, net, xml, кароче всё серьезно). сломался винт. восстановил данные за деньги в спец.конторе. Всё вроде восстановилось, а проект не открывается - программа падает при открытии... от последней резервной копии - 3 дня авральной работы. Вскрытие показало, что программу валило отсутствие нескольких файлов нулевой длинны, файлы не были восстановлены т.к. не содержат данные. создал их руками и чудо - всё заработало
zamtmn вне форума  
 
Непрочитано 01.10.2010, 12:12
#30
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


>Алексей Кулик
Да Лёша, теперь заработало. Есть одно маленькое замечание, показываю скрин:



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

Ну и... пустые группы в результирующем списке отсутствуют (хотя возможно это так тобою и задумано...).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 12:14
#31
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Пробелы не удалял, т.к. как-то не видел файлов с пробелами в начале и / или конце ключа. Поэтому и не предусматривал.
Пустые группы как-то тоже не видел: либо есть хранимая информация, и тогда нужны и группы, и ключи, либо этой информации нет, и ставить пустые заглушки туда смысла никакого. Это - не xml, тут валидность не настолько жестко определяется
Сугубо ИМХО.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 15:58
#32
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


ИХМО по этому вопросу - в каком формате и где содеражть внутренние данные программы - дело сугубо личное и выбирать только исходя из задачи - форматы файла расчитанные на то, что с ними будет работать другая программа или в ручную править юзер - это бред и аттавизм (тем более если под net), если подразумеваеться использовать данные из другой программы - нужно сделать импорт\экспорт в формат под задачу - это может быть и xml, но как формат передачи данных - ихмо он не очень (в 90% случаев csv гораздо эффективней, да и библиотек для него не меньше) т.к. чтоб разобрать его программа должна четко знать (догадываться-то они пока не умеют) ,что и с каким полем нужно делать - xml удобен для хранения (в зазипованном виде) "сложновложенных" данных с "прицелом" на расширение формата (самое толковое и правильное применение в openoffice) - там он (XML) более чем оправдан, а в остальном, тем более если мы говорим про современные языки, никаких "ручных" правок файлов и залезание в "чужие" файлы быть не должно - для этого есть графические формы и протоколы обмена информацией между приложениями (com как минимум) - эксель фалы вы как програмно редактируете (читаете)?, а dwg - правильно вызывая сам эксель, автокад - вот это и есть правильный подход.
з.ы. для чего "чужой" программе лезть в Ваши настройки без Вашего участия лично для меня вопрос, а тем более если это документировать - это получаеться мне перед каждым действием проверять - не поменялись ли мои-же настройки?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.10.2010, 16:53
#33
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
выбирать только исходя из задачи - форматы файла расчитанные на то, что с ними будет работать другая программа или в ручную править юзер - это бред и аттавизм (тем более если под net)
То, что мною процитировано выше - это и есть "бред и атавизм" (с).
Привожу пример:
У меня имеется маленькая библиотека, которая при запуске автокада выполняет синхронизацию определённых локальных каталогов с серверными. Управление синхронизацией ведётся через xml-файл. Изначально никакого GUI не было запланировано (нужно было быстро написать решение стоящей задачи, а вносить исправления в xml приходится не часто). Однако... вручную такой файл править всё же не хочется - потому позднее написал отдельное, внешнее приложение, работающее вне AutoCAD и позволяющее визуально, через GUI выполнять настройки этого (и не только этого) xml-файла. Т.о. налицо взаимодействия со сторонней программой, о котором я и писал выше и которое Вы назвали "бредом и атавизмом" (с).

Могла возникнуть и такая ситуация, при которой этот самый GUI писал бы не я. Тогда тот, кто решал бы эту задачу, всё так же, без каких либо сложностей нацарапал бы это приложение, заюзав Linq to XML или др. технологию. Однако если бы это был самописный на коленках ini-файл или тот же csv, который в подобной задаче "не пришей кобыле веник" - этот разработчик вспоминал бы меня не самыми лестными словами, т.к. ему пришлось бы писать пусть небольшой, но всё же парсер для такого файла, вместо того, чтобы юзать готовое решение.


Цитата:
Сообщение от Дима_ Посмотреть сообщение
если подразумеваеться использовать данные из другой программы - нужно сделать импорт\экспорт в формат под задачу - это может быть и xml, но как формат передачи данных - ихмо он не очень (в 90% случаев csv гораздо эффективней, да и библиотек для него не меньше) т.к. чтоб разобрать его программа должна четко знать (догадываться-то они пока не умеют) ,что и с каким полем нужно делать - xml удобен для хранения (в зазипованном виде) "сложновложенных" данных с "прицелом" на расширение формата (самое толковое и правильное применение в openoffice) - там он (XML) более чем оправдан,
Про "90% случаев csv"(с) - хранение настроек и передача данных - это разные вещи, не надо софистики. Если нужно экспортировать данные в Ecxel, то понятное дело, что следует юзать csv, а не xml.

Цитата:
Сообщение от Дима_ Посмотреть сообщение
чтоб разобрать его программа должна четко знать (догадываться-то они пока не умеют) ,что и с каким полем нужно делать
А вот это действительно бред. Т.е. если программе передать не xml, а csv, то она каким-то образом "узнает" что с ним делать? Чтобы программка "знала", программист как раз и пишет код, в котором реализует логику этого "знания". Технологии, предназначенные для работы с XML оперируют данными, а не ищут смысл.


Цитата:
Сообщение от Дима_ Посмотреть сообщение
а в остальном, тем более если мы говорим про современные языки, никаких "ручных" правок файлов и залезание в "чужие" файлы быть не должно - для этого есть графические формы и протоколы обмена информацией между приложениями (com как минимум) - эксель фалы вы как програмно редактируете (читаете)?, а dwg - правильно вызывая сам эксель, автокад - вот это и есть правильный подход.
з.ы. для чего "чужой" программе лезть в Ваши настройки без Вашего участия лично для меня вопрос, а тем более если это документировать - это получаеться мне перед каждым действием проверять - не поменялись ли мои-же настройки?
для чего и почему - я привёл простой пример выше. Приложения могут со временем расширяться и то, как хранятся его настройки - тоже не маловажно, поскольку с этими настройками могут в последствии работать и др. приложения. Яркий тому пример - AutoCAD, хранящий свои настройки в реестре, в следствии чего работать с ними неудобно. Гораздо удобнее было бы, если бы они хранились в xml-файле.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 17:09
#34
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


HWD - вы бы успокоились и посмотрели про что я пишу - а не цитировали весь пост с "опровержением" - работа с настройками между программами через файлы ЛЮБОГО формата это не есть правильный путь, они должны быть закрыты как методы в ООП - целиковые - а опреировать тем что другая программа не сможет работать с моими файлами работать - так это изначально тупиковый путь. Стандартный формат надо выбирать из удобства конкретной задачи, а не из "виртуальных" потребностей.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.10.2010, 17:20
#35
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
работа с настройками между программами через файлы ЛЮБОГО формата это не есть правильный путь
Согласен, я и не предлагал любой формат, а предлагал конкретный - xml.
Цитата:
они должны быть закрыты как методы в ООП
Не согласен. Если в процессе расширения приложения, потребуется добавить в файл настроек новый блок настроек, то тогда придётся перекомпилировать код класса, в котором содержатся упомянутые вами методы. А если обращаться как к xml- документу, то никаких изменений вносить не придётся. Я всегда оставляю зазор на возможное расширение, поскольку не люблю переписывать код.
Цитата:
опреировать тем что другая программа не сможет работать с моими файлами работать - так это изначально тупиковый путь. Стандартный формат надо выбирать из удобства конкретной задачи
Что тупикового в том, чтобы заранее предусмотреть хранение настроек в таком формате, в каком его было бы удобно использовать внешним приложениям? Вопрос риторический. Конкретная задача - хранение настроек в виде, удобном для работы с ними не только текущему программисту, но и удобном для тех, кто придёт работать после.

Предлагаю завершить полемику - не вижу в ней смысла. Пусть каждый хранит настройки в том формате, в каком ему больше нравится, хоть на перфокартах.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.10.2010, 20:17
#36
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Рассмотрим другую ситуацию...
Случайно были сохранены данные приводящие к сбою в программе... и невозможности ее дальнейшего использования... Что делать глупому юзеру, если поблизости ни буревестники ни админы не реют гордо...
gomer вне форума  
 
Непрочитано 01.10.2010, 23:07
#37
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


То hwd - вот смотри ты пишешь программу которая рисует и хранит, например, линии и как "впередмыслящий" ты хранишь их описание в xml и соответственно документируешь - мол для "внешнего" изменения или чтения надо работать с таки-ми-то параметрами. Да до определенного времени все хорошо, ты можешь расширить "функциоанал" с поддержкой предыдущих версий, например добавить параметр цвет, толщину линии и т.д. Но в один прекрасный момент ты понимаешь, что хранить в формате (начальная точка - конечная точка) тебе не очень удобно, а гораздо интересней хранить, например, начальная точка, длинна, вектор (по факту получилось что ты постоянно их пересчитываешь). И приходиться тебе для поддержки старых версий "тащить опендицит" в виде начальной-конечной точки, а с ним и альтернативный вектор - то есть избыточность как данных, так и вычислений, хотя тебе уже эти начальные и конечные точки нафиг не нужны - только процесс тормозят. В моем-же случае ты прото добавляешь новую функцию (пересчета из нового формата в старый) и все - весь остальной функционал работатет как и прежде, с полной совместимостью со старыми программами (они так и будут работать медленней т.к. делают постоянно лишние вычисления), но новые будут быстрей - ведь по факту ты уже оперируешь совсем другими данными.
p.s. и не забываем, что программа об изменении своих-же настроек другими, либо не знает (не оперативно), либо постоянно их переспрашивает (долго).
p.p.s. я все это время не про формат говорю - а про принцип - а принцип хранить "мультипрограмные" настройки в файле устарел со времен dos'а (это не наш dwg.ru'шный юзер а ОС).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 01.10.2010 в 23:19.
Дима_ вне форума  
 
Непрочитано 02.10.2010, 11:53
#38
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
Не согласен. Если в процессе расширения приложения, потребуется добавить в файл настроек новый блок настроек, то тогда придётся перекомпилировать код класса, в котором содержатся упомянутые вами методы
Да, программа должна как можно меньше зависеть от данных. Но откуда уверенность что это реализуемо только с помощью XML? так можно и с ini и любым другим нормальным форматом.
Топик постепенно перетекает с хранения настроек на хранение собственно данных. Сохранить положение-размер окон, последние введенные значения и т.п. сильно отличается от сохранить основные данные программы вообщето.
zamtmn вне форума  
 
Непрочитано 04.10.2010, 02:07 Запомнить последнее введенное значение
#39
randomizr


 
Регистрация: 29.09.2010
Сообщений: 2


из второй таблицы засовываю в массив.

Никак не могу понять, как сделать, чтобы при такой, например схеме:
randomizr вне форума  
 
Непрочитано 04.10.2010, 07:47
#40
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Еще раз, но по-русски.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Запомнить последнее введенное значение

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массовое редактирование свойств атрибутов блоков kgb Программирование 11 13.06.2023 14:39
Считывание значение ячейки таблицы в виде Field в AutoLISP tokhot LISP 9 08.01.2017 17:54
Значение аттрибутов блоков Андрей Будзинский AutoCAD 5 16.12.2009 17:18
ГОСТ Р 53231-2008 UnyqUm Поиск литературы, чертежей, моделей и прочих материалов 5 15.09.2009 14:41
Как в 2006 вызвать последнее введенное с клавиатуры? GAP AutoCAD 4 28.10.2005 16:39