Всего лишь изменить переменную

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
delta
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 10.06.2005 (Пт) 9:15
Откуда: Моск. обл.

Всего лишь изменить переменную

Сообщение delta » 10.06.2005 (Пт) 14:42

Привет всем поклонникам VB!
Кто подскажет, как реализовать возможность изменять значение любых переменных не на периоде отладки, а в процессе запуска готовой программы. То есть некую консоль, где можно ввести "Х=1", или "Х(10)=2" или "Y=3", или Z(1,2) = "Вася" и т.д. и чтобы программа выполнила эту строковую переменную как команду.
Заранее спасибо всем, кто откликнется.
Последний раз редактировалось delta 10.06.2005 (Пт) 15:51, всего редактировалось 1 раз.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 10.06.2005 (Пт) 14:45

ээ.. аа. ну это , вопрос не совсем понятен, нельзяли немного расширить?
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 10.06.2005 (Пт) 14:50

Так это... в ходе выполнения программы ведь и присваиваюца значения, или чета я туплю или не понял нефига......
Может это поможет:
если не обязательно консоль, то TextBox'ом пользуйся в свое удовольствие
Код: Выделить всё
Dim x As Integer
..........
x=Val(Text1.Text)
..........

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 15:18

Не наверное это:
MSDN писал(а):Visual Basic Scripting Edition

EvalSee Also
Execute Statement
Requirements
Version 5
[This topic is part of a beta release and is subject to change in future releases. Blank topics are included as placeholders.]

Evaluates an expression and returns the result.

[result = ]Eval(expression)
Arguments
result
Optional. Variable to which return value assignment is made. If result is not specified, consider using the Execute statement instead.
expression
Required. String containing any legal VBScript expression.
Remarks
In VBScript, x = y can be interpreted two ways. The first is as an assignment statement, where the value of y is assigned to x. The second interpretation is as an expression that tests if x and y have the same value. If they do, result is True; if they are not, result is False. The Eval method always uses the second interpretation, whereas the Execute statement always uses the first.

Note In Microsoft® JScript™, no confusion exists between assignment and comparison, because the assignment operator (=) is different from the comparison operator (==).
The following example illustrates the use of the Eval function:

Sub GuessANumber
Dim Guess, RndNum
RndNum = Int((100) * Rnd(1) + 1)
Guess = CInt(InputBox("Enter your guess:",,0))
Do
If Eval("Guess = RndNum") Then
MsgBox "Congratulations! You guessed it!"
Exit Sub
Else
Guess = CInt(InputBox("Sorry! Try again.",,0))
End If
Loop Until Guess = 0
End Sub

Requirements
Version 5

See Also
Execute Statement


:D :wink:
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

delta
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 10.06.2005 (Пт) 9:15
Откуда: Моск. обл.

Сообщение delta » 10.06.2005 (Пт) 15:40

Поясню задачу. Существует большое число различных переменных, массивов ... Требуется на определённом этапе тормознуть исполнение программы, ввести команду присвоения ЛЮБОЙ ( а не выбраной из предлагаемого списка) переменной и нажать "Ентер" для продолжения. Ну типичная консоль. Как вариант - нужна функция преобразования строки в команду. Другой вариант - функция, которая при передаче в неё двух аргументов - имени переменной и значения этой переменной, присваивала бы переменной с таким именем передаваемое значение.
Уф, на первый взгляд очень простая задача, только вот что-то имя переменной становится просто строковой переменной со всеми вытекающими ...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 15:47

Мало информации.
delta писал(а):Поясню задачу. Существует большое число различных переменных, массивов ... Требуется на определённом этапе тормознуть исполнение программы, ввести команду присвоения ЛЮБОЙ ( а не выбраной из предлагаемого списка) переменной и нажать "Ентер" для продолжения. Ну типичная консоль.


Это не типичная консоль, а плохо спроектированное приложение.
Любой - это какой, критерий любой есть?
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

delta
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 10.06.2005 (Пт) 9:15
Откуда: Моск. обл.

Сообщение delta » 10.06.2005 (Пт) 15:55

Вообще-то подобная консоль имеется в VB. Это тоже плохо спроектированное приложение?
Любой - это значит любой (и вплоть до необъявленых - фиг с ним - пусть вызывают ошибку).
Последний раз редактировалось delta 10.06.2005 (Пт) 16:12, всего редактировалось 3 раз(а).

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 10.06.2005 (Пт) 15:57

ну и замудренно... :shock:
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 16:13

delta писал(а):Вообще-то подобная консоль имеется в VB. Это тоже плохо спроектированное приложение?
Любой - это значит любой (вплоть до необъявленых - фиг сним -пусть вызовут ошибку).


Почитай Джона Робинса "Отладка Windows-приложений". Там описанно как сделать такую консоль
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

delta
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 10.06.2005 (Пт) 9:15
Откуда: Моск. обл.

Сообщение delta » 10.06.2005 (Пт) 16:30

Спасибо, конечно, за совет...
Может я недостаточно раскрыл суть своего вопроса?...
Как это предусмотреть при написании программы. То есть предусмотреть впоследствии при её исполнении возможность изменения всевозможных параметров. Если переменных 20, то легко разместить на форме 20 окошек, а если их целая база массивов, свойств и т.д. , то было бы удобней предусмотреть некий универсальный способ.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.06.2005 (Пт) 16:47

Сделать переменные свойствами некоего объекта (одного или нескольких, не суть). Потом изменять их через CallByName (obj, "name", VbLet, value)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 16:51

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

А то что я тебе сказал за книгу там описанно как написать отладчик.

А чего хоть программа будет делать? если не секрет
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2005 (Пт) 17:16

Igor_123 писал(а):
delta писал(а):Вообще-то подобная консоль имеется в VB. Это тоже плохо спроектированное приложение?
Любой - это значит любой (вплоть до необъявленых - фиг сним -пусть вызовут ошибку).


Почитай Джона Робинса "Отладка Windows-приложений". Там описанно как сделать такую консоль

Предполагаю, что там написано: никак!
Господа, вы что рехнулись? Дословно: человек спрашивает, как написать функцию:
Код: Выделить всё
SetValue(Byval Name as String,Byval Value as String)

Где в параметре Name укзано имя переменной, а в параметре Value ее значение. Я правильно понял?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 17:25

ANDLL
почему никак, очень даже как!

Судя по всему ты правильно понял :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2005 (Пт) 17:26

2GSerg:Ты видимо имел это ввиду:
Код: Выделить всё
Option Explicit
Public A As Long
Public B As String

Private Sub Command1_Click()
    CallByName Me, Text1.Text, VbLet, Text2.Text
End Sub

Text1 - имя переменной, Text2 - ее значение. Command1 - кнопочка "присвоить"
:?:
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2005 (Пт) 17:27

Igor_123 писал(а):ANDLL
почему никак, очень даже как!

Судя по всему ты правильно понял :D

Если переменная объявлена в модуле(или в процедуре) и программа скомпилироване в Release-конфигурации, то НИКАК.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 10.06.2005 (Пт) 17:33

В книге написано как написать отладчик. Есть пример отладчика. У отладчика есть возможность изменять данные и не только, внутри отлаживаемой программы. Т.е. изменить можно не только значение переменной но и исполняемый код :wink: [/list]
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

delta
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 10.06.2005 (Пт) 9:15
Откуда: Моск. обл.

Сообщение delta » 10.06.2005 (Пт) 17:38

Спасибо всем, кто откликнулся.
Попробую "CallByName" :salut:

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.06.2005 (Пт) 17:50

Н-да. Изменять данные и код моэно и без "отладчика". Для изменения данных используется оператор Let :)
А для измененения кода - пара VirtualProtect/CopyMemory(про это уже говорилось в одной теме...)
Вот только тут естьдва момента, которые тебе следует понять:
а) когда ты будешь заменть в запущенной программе код, то в независимости от языка, на котором эта программа написана, изменяемы код должен быть на одном языке - машинном.
б) В процессе компиляции бэйсик заменяет символьные имена переменных особыми цифрами - смещениями. Соответственно, в EXE файле вообще не останется упоминаний про то, как эти переменные называли на девственном этапе разработки. Ты не можешь, в тот момент, когда программа выполняется определить, по какому адресу лежит переменная, названная на этапе разработки, скажем A. Только в том случае если на том же этапе разработки ты не написал особой функции(для каждой премененной), типа
Код: Выделить всё
Function GetA()
GetA=A
End Function

Но ведь это лишено смысла...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.06.2005 (Пт) 18:35

delta писал(а):Вообще-то подобная консоль имеется в VB. Это тоже плохо спроектированное приложение?

"консоль" VB позволяет менять переменные не среды VB, а разрабатываемой программы. Это разные вещи.
Изображение

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 11.06.2005 (Сб) 12:42

ОФФ:
прочитал вопрос, а потом во что он вылелся... и офигел :)
как так можно вопросы задавать :? :?: :shock: :evil:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 80

    TopList