Тема: Как получить имя переменной из строки?

допустим есть строка, содержащая имя переменной.
можно ли обратиться к этой переменной именно через сторку?

Re: Как получить имя переменной из строки?

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

Re: Как получить имя переменной из строки?

> brigval
Да почему нет? А это чем не обращение:

Dim sysVarName As String
    Dim varData As Variant
    sysVarName = "FILLMODE"
    varData = ThisDrawing.GetVariable(sysVarName)

Re: Как получить имя переменной из строки?

> Leonid
Мне показалось, что вопрос не о системной переменной, а о переменных в коде программы. Поэтому я так и ответил.

Re: Как получить имя переменной из строки?

хотелось бы да, именно о тех, которые в коде.
все равно спасибо!

Re: Как получить имя переменной из строки?

> kb-nn
В бейсике это НЕВОЗМОЖНО в принципе. А в лиспе - пожалуйста, там есть функция (read), почитайте в хелпе про её возможности. На входе она получает строку (составленную по определённым правилам, см. хелп), а на выходе - результат интерпретации этой строки (!!!). А бейсик, паскаль, Си, ява, ... - все отдыхают.

Re: Как получить имя переменной из строки?

Пример кода с использованием (read) можно посмотреть здесь:
https://www.caduser.ru/forum/topic9032.html,
в постинге > Maxim T (2004-06-27 22:44:11)

Re: Как получить имя переменной из строки?

Думаю, что по-большому счету, Maxim T прав...
А по-маленькому, как ни смешно, но нижеприведенная конструкция работает:

Sub testVar()
     Dim Var1 As Integer
     Dim Var2 As Integer
     Dim VarString As String
     Var1 = 1
     Var2 = 2
     VarString = GetVarName()
     MsgBox CVar(VarString)
End Sub
Public Function GetVarName()
     GetVarName = "Var2"
End Function

Re: Как получить имя переменной из строки?

> Leonid
Ваш код, наверное, можно записать проще:

Sub testVar()
     Dim VarString As String
     VarString = "Var2"
     MsgBox VarString
End Sub

Re: Как получить имя переменной из строки?

> Leonid
Имхо, я прав и по-большому (счёту), и по-маленькому :).
Приведённый вами код просто выводит строку на экран (о чём не без иронии указал > brigval (2004-12-10 16:47:48)), а автор ветки спрашивал, очевидно, совсем о другой задаче, с которой справится Лисп и только Лисп (ну может быть, ещё FORTH, но он в акаде не поддерживается:)).

Re: Как получить имя переменной из строки?

> Maxim T
Ну что тут можно сказать? Все правы. И по всем счетам!
А автор ветки спрашивал:допустим есть строка, содержащая имя переменной.можно ли обратиться к этой переменной именно через сторку?

Насколько я понимаю, речь идет о строке, значение которой заранее не известно, и которая получена в результате работы программы. Если такую строку конвертировать, как показано в приведенном посте, то можно обращаться к ней как к переменной. В ироническом варианте brigval'а есть (вероятно намеренная) неточность:

Dim VarString [i]As String[/i]

В вопросе автора темы нет указаний на тип переменной.
И еще, уважаемый Maxim T, вы вероятно не запускали приведенный код, иначе обратили бы внимание, что на экран выводится не "просто строка", а значение переменной, имя которой совпадает с полученной строкой.
Bообщем, интересно было бы узнать мнение автора темы,
а-ууу,kb-nn!

Re: Как получить имя переменной из строки?

Leonid пишет:

на экран выводится не "просто строка", а значение переменной, имя которой совпадает с полученной строкой

Нет, я внимательно изучил ваш код, и не только запускал его, но и пытался сам написать что-то подобное. Увы, чудес не бывает, на экран выводится "Var2", а не "2", то есть ИМЯ переменной, а не её значение.
Я думаю, если бы в бейсике на самом деле БЫЛА такая возможность, о ней "трубили" бы "до посинения" при каждом удобном случае. Программирование тем и лучше других сторон человеческой деятельности, что здесь правдоподобные небылицы можно разоблачить парой нажатий кнопки (я имею в виду: "пометить код в форуме" -> Ctrl-C -> "перейти в акадовский бейсик" -> Ctrl-V -> "перейти в редактор акада" -> Alt-F8). Извините, если вышло грубо, но не надо рассказывать неправду новичкам.

Re: Как получить имя переменной из строки?

Вынужден извиниться перед участниками обсуждения - был неправ относительно результатов работы приведенного кода(2004-12-10 16:10:20) , поспешил и принял желаемое за действительное. Тем не менее, считаю что сводить проблему к сравнению достоинств и недостатков языков программирования не стоит, дело не в языках, а в их использовании. Так ,с практической точки зрения, обратиться к переменной, имя которой получено в виде строки, можно и в VB. Допускаю что прием (создание коллекции переменных) и выглядит несколько искусственно, но результат дает:

Sub testVar()
     Dim Var1 As Integer
     Dim Var2 As Integer
     Var1 = 1
     Var2 = 2
 'create a collection of variables:
     Dim VarCol As New Collection
     VarCol.Add Var1, "Var1"
     VarCol.Add Var2, "Var2"
     Dim VarString As String
     VarString = GetVarName()
     MsgBox (VarCol(VarString))
End Sub
Public Function GetVarName()
     GetVarName = "Var2"
End Function

Re: Как получить имя переменной из строки?

> Leonid
Leonid,  Вы неисправимый оптимист :)

Re: Как получить имя переменной из строки?

> Maxim
T
Помню, что где то видел, но не было нужды и я не воспользовался. А что вы скажете на пример из хелпа VBA?

Sub Example_Eval()
    ' This example shows how we can use Eval to run a VBA code fragment
    ' without having to create a Module or procedure.
    Dim VBACode As String
    ' Create VBA code fragment
    VBACode = "MsgBox ""Simple code fragment"""
    ' Use Eval method to evaluate our small VBA script
    Eval (VBACode)
End Sub

Не подрывает ли он позиции Лиспа в контексте нашего разговора?
Помню, что видел и еще примеры, но нет времени заняться поиском :(

Re: Как получить имя переменной из строки?

https://www.caduser.ru/forum/topic11699.html

Re: Как получить имя переменной из строки?

то brigval , спасобо за подсказку.
А теперь внимание, правилный ответ(если кому надо :)))
Мощнейший, наиполнейший, функциальнеший, калькулятор.
Спешите не пропустите.
Всего 21 строка кода.
Для проекта необходимо:
Внимание
1.Добавить в Tools->References->
Выбрать: MicroSoft Visual Basic for Application Extensibylity 5.3
2.Добавит в модуль ThisDrawing 3(три) пустые строки(Очень Важно)
3.Добавить новый модуль
4.Добавить в новый модуль 21 строку кода

Sub calc()
Dim vv As VBE
Set vv = VBE
Dim mo As VBComponent
a = InputBox("Simple Calculation")
For Each mo In vv.ActiveVBProject.VBComponents
 If mo.Name = "ThisDrawing" Then
  mo.CodeModule.DeleteLines 1
  mo.CodeModule.DeleteLines 1
  mo.CodeModule.DeleteLines 1
  msg = "sub code" & vbCrLf & "msgbox cstr(" & _
        a & ")" & vbCrLf & "end sub"
  mo.CodeModule.InsertLines 1, msg
 End If
Next
For Each mo In vv.ActiveVBProject.VBComponents
 If mo.Name = "ThisDrawing" Then
  Eval ("ThisDrawing.code")
 End If
Next
End Sub

5.Запустить ф-ю calc
6.Ввести в окно инпут cos(23*3-6) + 4 * Atn(1)
7. Насладиться результатами моего труда :)

Re: Как получить имя переменной из строки?

> cadhelp
Получил "большое эстетическое удовольствие", хотя почему-то не сработала третья строка... Но не в этом дело.
У меня стоит VBA-Recorder, который и не такие штуки вытворяет, однако такого кайфа как от вашего кода я не получал. Спасибо за, можно сказать, новогодний подарок.

Re: Как получить имя переменной из строки?

> cadhelp
Сразу не получилось, но потом пошло.
1 При наличии Option Explicit добавил
Dim a As String
Dim msg As String
2 В ThisDrawing пришлось убрать Option Explicit  и, естественно, перенести объявленные переменные с уровня модуля на уровень процедур. Так процедура code вставляется до них.
На счет удовольствия ничего определенного сказать не могу :(
>Maxim T
Благодаря дискуссии и Вашим серъезным ответам, мы вместе узнали про VBA еще что-то. На функцию Eval я наткнулся случайно, когда искал аналог функции Wait из VBA for Excel. Правда, так и не нашел :(

Re: Как получить имя переменной из строки?

> kb-nn
Да, если Вы поняли, то, выходит, что можно.
Вот работающий пример.

Public temp1 As String
Sub test()
Dim temp2 As String
temp1 = "Good!"
temp2 = "MsgBox" & Space(1) & "temp1"
Eval (temp2)
End Sub

Увидим "Good!"

Re: Как получить имя переменной из строки?

Или вот такой

Public temp1 As String
Public temp2 As String
Sub test()
temp1 = "Good!"
temp2 = "temp2=" & "temp1"
Eval (temp2)
MsgBox temp2
End Sub

Увидим "Good!"

Re: Как получить имя переменной из строки?

Самое кульное что етот калькулятор работет со всеми ВБишными ф-циями кототорые возвращают число ну и нeкоторые другие, например можно
date
или даже
len(date)-len(time)
:)))

Re: Как получить имя переменной из строки?

спасибо!
функция eval  мне понравилась.
остального я ничего не понял.
хотя впрочем этого вполне хватает.
спасибо!

Re: Как получить имя переменной из строки?

Вдогонку к теме...
Наткнулся на control, который преобразует строку в код и может даже запустить полученную процедуру на выполнение:
http://www.firststeps.ru/ ,Visual Basic, шаг 105

Re: Как получить имя переменной из строки?

спасибо!