Avatar billede Slettet bruger
29. august 2002 - 09:46 Der er 27 kommentarer og
1 løsning

"2+2" -> 4

Hvilken funktion skal jeg bruge for at få tekststrengen "2+2" til at give talvariablen 4 ?
Avatar billede mikker Nybegynder
29. august 2002 - 10:36 #1
Lidt svært med en streng...
Hvis du kun skal bruge "2+2" kan du gøre sådan:

b$ = "2+2"
a = Val(Left(b$, 1)) + Val(Right(b$, 1))

Dette er dog ikke brugbart i længden. :-)

- Mikker
Avatar billede moses Praktikant
29. august 2002 - 10:47 #2
Jeg vil godt give dig tippet om, hvordan du kan "spise" dig igennem en string og få den oversat til tal, men jeg har desværre ikke tid til mere lige nu.

myStr = "22 + 3 + 5"

val(myStr): giver dig det mest venstrestillede tal.

len(cstr(val(myStr))): giver dig hele tiden antal cifre på det mest venstrestillede tal, så du ved, hvor mange tegn du skal rykke mod højre i myStr for at få de næste information.

ltrim(myStr): trimmer mellemrum væk i venstre side.

Så kan du blot bruge right(myStr,X) til at læse fra venstre mod højre.
Avatar billede medions Nybegynder
29. august 2002 - 10:52 #3
strTal1 = "2"
strTal2 = "2"
intResult = CInt(strTal1 + strTal2)

MsgBox(intResult)

//>Rune
Avatar billede martin_moth Mester
29. august 2002 - 11:37 #4
Generelt: Hvis du har et tekstfelt, hvori man skal kunne indtaste udtryk der skal udregnes, må du opstille regler for lovlig syntaks.

Først og fremmest skal du kun tillade, at man indtaster tallene 0-9 samt fx. de 4 regneoperatorer +-*/

Men hvad hvis en bruger indtaster /4+*5 eller -1+ ?

Man kan sagtens lave en funktion, der piller alle regneoperatorene og tallene ud af en streng (som moses er inde på), men du skal så tage højde for ovenstående når du vil udregne resultatet. Alt i alt en ret omfattende opgave, hvis brugeren frit skal have lov at indtaste i feltet.

Hvad skal du i øvrigt bruge det til - måske er der en meget bedre løsning, fx. 2 text-felter, hvori man kan indtaste tal, og i mellem de 2 textfelter smnider du en combo-box hvor man kan vælge +, -, * eller /?

Select case Combo1.Listindex
  case 0 '+
    resultat = text1.text + text2.text
  case 1 '-
    resultat = text1.text - text2.text
  case 2 '*
    resultat = text1.text * text2.text
  case 3 '/
    resultat = text1.text / text2.text
end select
Avatar billede mikker Nybegynder
29. august 2002 - 11:37 #5
>> Rune nu snyder du jo :-) 2 strenge på en gang, det er snyd.

- Mikker :-)
Avatar billede moses Praktikant
29. august 2002 - 11:45 #6
I gamle dage ... meget gamle dage, hed det:

ld hl,32h-30h
ld ax,32h-30h
add ax,hl
Avatar billede moses Praktikant
29. august 2002 - 11:47 #7
Og dengang havde man også de hjemmebyggede "interpreters".
Hver gang du har mødt et godkendt tal, skal du kun tillade ét regnetegn - og hver gang du har mødt ét regnetegn, skal du kun tillade ét tal (bestående af et eller flere cifre).

Det er ved at være sådan,at man tror, at kun Microsoft kan lægge 2 og 2 sammen. Det er altså ikke så særlig svært !!
Avatar billede Slettet bruger
29. august 2002 - 12:22 #8
medions, martin m.fl. >>> Det er ikke det konkrete stykke det drejer sig om. Det handler om at der er en tekststreng som indeholder et regnestykket med 2 eller måske flere led. Og de skal udregnes som om det ikke var en tekststreng..
Avatar billede proaccess Nybegynder
29. august 2002 - 14:08 #9
Du skal vist kigge på funktionen Eval()
Avatar billede moses Praktikant
29. august 2002 - 14:11 #10
Hvorhenne skal han se efter den ??
Avatar billede proaccess Nybegynder
29. august 2002 - 14:16 #11
I VBA til Access... Undskyld, jeg forventede at den funktion også var i VB...
Avatar billede bak Forsker
29. august 2002 - 22:34 #12
se http://msdn.microsoft.com/vbasic/productinfo/previous/vb6/tips/00pasttips.asp#3-20-00

søg efter Evaluate string formulas in Visual Basic
Der er en lille download (ocx) der kan hjælpe med functionen EVAL
Avatar billede medions Nybegynder
30. august 2002 - 07:49 #13
LoL

//>Rune
Avatar billede krismort Nybegynder
30. august 2002 - 20:19 #14
hvis du bare skal lægge sammen så kan du bruge den her .. du kan udvide med flere funktioner efter samme princip og behandle dit stykke efter regneregler

Private Function Adder(str As String) As Long
On Error Resume Next
Dim tmpstr() As String, n As Integer
'str = "4+5+3+22"

tmpstr() = Split(Text1.Text, "+")
For n = 0 To UBound(tmpstr)
    Adder = Adder + Val(tmpstr(n))
Next n

MsgBox "Resultatet blev: " & Adder
End Function
Avatar billede krismort Nybegynder
30. august 2002 - 20:24 #15
Hvis du vælger at bruge den fremgangsmetode så vil jeg foreslå dig at starte med udvide så programmet kan bruge paranteser... derefter skal du nok prøve og lave nogen funktioner som kan sætte parantser ind i en 'stykkestreng' efter de de bersale regneregler.

Kristiaan
Avatar billede krismort Nybegynder
30. august 2002 - 20:25 #16
(programmet kan bruge paranteser = eksemplet kan bruge paranteser)
Avatar billede moses Praktikant
02. september 2002 - 09:05 #17
>>>krismort
Bare for at trampe lidt i det:

Parenteser er ikke nødvendige, når man bare lægger samme nog trækker fra.  ;-)

>>>bak
Rigigt godt link !!
Avatar billede martin_moth Mester
04. september 2002 - 13:41 #18
Er du der stadig, muta? Svar og accepter et eller flere spørgsmål :o)
Avatar billede Slettet bruger
05. september 2002 - 17:14 #19
bak >>> jeg installerer ocx-en, men stadig virker det ikke når jeg skriver:

r = Eval("2+2")

Gør jeg noget forkert her?

/Andreas
Avatar billede Slettet bruger
05. september 2002 - 17:16 #20
i andre >>> Jeg kan ikke se at i løser mit problem. Jeg skal have udregnet et vilkårligt regnestykke med et vilkårligt antal led.
Avatar billede moses Praktikant
05. september 2002 - 19:14 #21
OCX'en er ikke nødvendig, hvis du har windows 2000, for der er den med.
Du starter dit Visual Basic projekt op, henter komponenten:

Microsoft Script Control

tager en eller anden form frem, tager Script Control icon'et fra toolbox'en og sætter den på din form.
Den får så automatisk navnet ScriptControl1, hvilket så kan ændres.
Herefter vil du i koden til denne form kunne skrive f.eks.:

dim tmpVal as Single

tmpVal = Val(ScriptControl1.Eval("(2+4-5*2)/(5+2*2)"))
Avatar billede moses Praktikant
05. september 2002 - 19:17 #22
UPS!!

dim tmpVal as Single

tmpVal = CSng(ScriptControl1.Eval("(2+4-5*2)/(5+2*2)"))
Avatar billede Slettet bruger
06. september 2002 - 08:13 #23
Jeg kan ikke se script control i toolbaren, skal den hentes ind i toolbaren på en eller anden måde?
Avatar billede moses Praktikant
06. september 2002 - 08:22 #24
Opsamling, så der ikke mangler noget:

Hvis du har OCX'en installeret eller du har Windows 2000, så har du komponenten.

Når du har hentet dit projekt ind i Visual Basic, går du op på menuen
"Projekter / Komponenter" under fanebladet "Controls" og ned på linien, hvor der står
"Microsoft Script Control ...."
Og sætter et flueben og trykker OK.

Nu vil der være en control på din "General" toolbar. Den kan du så trække over på din form, hvorefter du kan benytte koden, som angivet. Navnet "ScriptControl1" er det navn, som du har givet control'en ude på din form.
Avatar billede moses Praktikant
06. september 2002 - 08:34 #25
OG ... hvis du ikke har Windows 2000, så er det jo ikke nok bare at hente OCX filen over på din PC i systembiblioteket (f.eks. c:\winnt\system32). Den skal bagefter registreres ved brug af en kommando, der hedder:

regsvr32 c:\winnt\system32\msscript.ocx

og så ovenstående smøre.
Avatar billede moses Praktikant
06. september 2002 - 08:35 #26
SOM du starter ved at vælge START / RUN...  og så skriver det i kommandolinien.
Avatar billede Slettet bruger
06. september 2002 - 10:34 #27
Det virker - takker for hjælpen...
Avatar billede moses Praktikant
06. september 2002 - 11:54 #28
Værsgo'
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester