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.
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
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 !!
Synes godt om
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..
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
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.
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.:
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.
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:
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.