Как просчитать????

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

Как просчитать????

Сообщение sl-shem » 29.05.2006 (Пн) 14:00

Есть строкавая переменная "2+(2*2)" т.е. она может принимать любое выражение. Как можно в бейсике просчитать эту строку??? В php знаю есть EVAL может и в бейсике есть что подобное???

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 29.05.2006 (Пн) 14:03

Script Control.
Лучший способ понять что-то самому — объяснить это другому.

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 29.05.2006 (Пн) 14:05

Что то не очень понятно. Нельзя по подробней????

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

Сообщение tyomitch » 29.05.2006 (Пн) 14:09

"по подробней" -- в поиске.
Изображение

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 29.05.2006 (Пн) 14:09

Project->Components->Microsoft Script Control 1.0

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 29.05.2006 (Пн) 14:16

СПАСИБО!!!! Все заработало. А то я в excel подкладывал!!!!

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 29.05.2006 (Пн) 14:24

а как с помщью него просчитать например iif(2=>3;(10);(100))

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.05.2006 (Пн) 14:40

А просто через IIf никак?
Весь мир матрица, а мы в нем потоки байтов!

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 29.05.2006 (Пн) 14:45

конечно можно и просто через iff, но лучше что бы сразу!!!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.05.2006 (Пн) 14:50

Ну так пиши сразу, кто тебе не дает. Только разделитель элементов -- запятая, а не точка с запятой.
Lasciate ogni speranza, voi ch'entrate.

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 29.05.2006 (Пн) 14:58

Вот пишу так "IIF(2>2,(2),(3))" и вываливается с ошибкой "Type mismatch: 'IIF'"

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.05.2006 (Пн) 15:00

открой msdn и поищи справку по этому контролу, очень много полезного узнаешь AddCode, AddObject и тд и тп :wink:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.05.2006 (Пн) 15:10

"Exploring the Microsoft Script Control" статья в MSDN

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 29.05.2006 (Пн) 20:01

Код: Выделить всё
Option Explicit

Public a As Integer

Private Sub cmd_Click()
  SC.Reset
  SC.AddObject "MainForm", Me, True
  On Error GoTo ErrorHandler
  SC.AddCode "sub M" & vbNewLine & "dim nA" & vbNewLine & _
  "nA=" & "2+(2*2)" & vbNewLine & "MainForm.a=nA" & vbNewLine & "end sub"
  SC.Run "M"
  Print Me.a
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & vbNewLine + Err.Description, vbCritical, "Ошибка"
End Sub
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 30.05.2006 (Вт) 7:24

Код: Выделить всё
Function myEval(s As String, Optional bError As Boolean, Optional sErr As String) As Double
  Dim sc As New ScriptControl
  On Error GoTo er
 
  bError = True
  sc.Language = "VBScript"
  myEval = sc.Eval(Replace(s, ",", "."))
  bError = False
 
er:
  sErr = Err.Description
End Function

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 27.06.2006 (Вт) 10:20

Все замечательно работате, но я так и не могу просичтать строку типа:
dim S as string
s= "IIF(2>1,1,2)"
sc.eval s

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 27.06.2006 (Вт) 10:30

Код: Выделить всё
Function myRunScript(sFormula, Optional bError As Boolean, Optional sErr As String) As Variant
  Dim sc As New ScriptControl
  On Error GoTo er
 
  bError = True
  sc.Language = "VBScript"
  sc.AddCode "Function myScript" & vbLf & "myScript = " & Replace(sFormula, ",", ".") & "End Function"
  myRunScript = sc.Run("myScript")
  bError = False
  GoTo ok
 
er:
  If sc.Error.Number <> 0 Then
    If sc.Error.Number = 6 Then
      bError = False
    Else
      sErr = sc.Error.Description & " в строке:" & vbLf & sc.Error.Text
    End If
  Else
    sErr = Err.Description
  End If

ok:
  Err.Clear
End Function

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 27.06.2006 (Вт) 10:35

вот передаю я строку "IFF(2>1,1,2)" и все равно вылетает ошибка!!!!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.06.2006 (Вт) 10:41

vbscript не знает что такое iif, в нет такой функции.
Лучший способ понять что-то самому — объяснить это другому.

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 27.06.2006 (Вт) 10:42

и ни чем заменить его нельзя???

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.06.2006 (Вт) 10:53

Поставь ему значение .language="JavaScript" и замени IIF на



Код: Выделить всё
function a()
{
var b=(2>3)?100:10;
return b;
}


:lol:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.06.2006 (Вт) 11:21

Написать свой IIF и добавить через AddCode.
Код: Выделить всё
Function IIF(Condition, TrueValue, FalseValue)
    If Condition Then
        IIF = TrueValue
    Else
        IIF = FalseValue
    End IF
End Function

Но это имеет смысл только если у тебя километры кода, который надо перевести с VB на VBScript и активно юзается IIF. Лучше пиши вместо него развернутое условие.
Лучший способ понять что-то самому — объяснить это другому.


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

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

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

    TopList