Avatar billede jakob12345 Nybegynder
29. november 2003 - 22:05 Der er 16 kommentarer og
1 løsning

problem med en string

Jeg ville gerne have så jeg kan indtaste et eller regnestykke i en tekstbox, og når jeg så trykker på en knap så regner den stykket ud.
Er der en måde at gøre det på??
Avatar billede minijensen1 Nybegynder
29. november 2003 - 22:07 #1
Det er vist lidt indviklet, især hvis det skal laves med flerledede regneudtryk.
Med et udtryk som 2 + 3, kan du måske godt ved hjælp af Split-funktionen, og InStr-funktionen. Men skal det være størrere og mere indviklede regnestykker er der vist ikke lige en nem måde at klare det på.
Avatar billede jakob12345 Nybegynder
29. november 2003 - 22:09 #2
har du et hint til hvordan man evt. kunne gøre det med indviklede operationer med paranteser, rødder og sådan noget??
Avatar billede minijensen1 Nybegynder
29. november 2003 - 22:11 #3
Så skal du på en eller anden måde have fundet alle parantesserne først, og regnet dem ud. Med InStr-funktionen kan du få af vide hvor i en tekst en parantes er, men tror ikke at det vil være en optimal måde at gøre det på.
Kan ikke lige komme på en måde du kan gribe det an på, desværre :/
Avatar billede arne_v Ekspert
29. november 2003 - 23:08 #4
Det kan selvfølgelig gøres.

Teknikken er kendt:
  - konverter string til array af atomiske dele
  - konverter det array fra infix til postfix under hensyn til operator precedens
  - evaluer udtryk via stak

"2 + 3" => konstant 2, operator +, konstant 3
konstant 2, operator +, konstant 3 => konstant 2, konstant 3, operator +
konstant 2, konstant 3, operator + => konstant 5

Men helt simpelt er det ikke.
Avatar billede arne_v Ekspert
29. november 2003 - 23:09 #5
Eneste smuthul er hvis VB har en eval funktion ligesom JS, hvor
Microsoft har lavet arbejdet.
Avatar billede martin_moth Mester
29. november 2003 - 23:09 #6
jakob12345: Det er ret kompliceret det du vil. Hvis du virkelig ønsker en funktion, der kan udregne hvad som helst, fx.

Udregn( "3+4*(2/(4-2.3))" )

Så må du først isolere paranteser, regneoperatorer osv. Og så må du tjekke om syntaksen er OK, fx. skal det være ulovligt at udregne

  "3+-4.3.2.1//*33(3)"

De eneste programmer jeg kender til der kan sådan noget er fx. MathCAD - ingen programmer i fx. MSOffice-pakken kan noget tilsvarende, mig bekendt...

En anden måde at lave programmet på er at have et antal textboxe og fx. en combo mellem hver textbox, hvor brugeren vælger regneart...
Avatar billede arne_v Ekspert
29. november 2003 - 23:31 #7
VB har en eval funktion !

Jeg har lige testet:
  MsgBox Eval("2 + 3")
og det virker.
Avatar billede arne_v Ekspert
29. november 2003 - 23:32 #8
MsgBox Eval("3+4*(2/(4-2.3))")

virker også.
Avatar billede arne_v Ekspert
29. november 2003 - 23:32 #9
Så brug eval funktionen.
Avatar billede inglenook Praktikant
29. november 2003 - 23:41 #10
Avatar billede jakob12345 Nybegynder
29. november 2003 - 23:47 #11
arne_v--> bruger du vb.net?? for eval virker ikke for mig og jeg bruger vb 6.0
Avatar billede arne_v Ekspert
29. november 2003 - 23:50 #12
Jeg testede i VBA.
Avatar billede jakob12345 Nybegynder
29. november 2003 - 23:53 #13
ok, tak for hjælpen. Jeg prøver at arbejde videre med det :-)
Avatar billede arne_v Ekspert
30. november 2003 - 00:02 #14
Der er forskel.

Læs her:
  http://www.a1vbcode.com/vbtip.asp?ID=3
Avatar billede arne_v Ekspert
30. november 2003 - 00:29 #15
De har også vejledningen til hvordan man får VBA funktionaliteten ind i VB.
Avatar billede jakob12345 Nybegynder
30. november 2003 - 01:41 #16
har du et link til den vejledning??
Avatar billede arne_v Ekspert
30. november 2003 - 10:07 #17
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