Avatar billede ducks Nybegynder
05. maj 2004 - 18:04 Der er 8 kommentarer og
1 løsning

Blander sig i hinanden og springer ikke de forkerte pattern over

Hvad skyldes fejlen at de blander sig i hinanden, skriver jeg fx "2+2", klager den over at det ikke kan bruges i den første pattern og skriver jeg "ln(2)" brokker den sig i den næste osv. Den burde da bare springe til næste pattern, når det ikke passer?

Function Calc(Source)
    Dim Val1, Val2 As Double
    Calc = Source
    Set regEx = New RegExp
        regEx.Global = True
        regEx.IgnoreCase = True
       
        regEx.Pattern = "(ln\()(.+)(\))"
        Val1 = regEx.Replace(Calc, "$2")
        Calc = "log(" & Val1 & ") = " & Math.Log(Val1)

        regEx.Pattern = "(.+)(\+)(.+)"
        Val1 = regEx.Replace(Calc, "$1")
        Val2 = regEx.Replace(Calc, "$3")
        Calc = Val1 & " + " & Val2 & " = " & Val1 + Val2
    Set regEx = Nothing
End Function
Avatar billede roenving Novice
05. maj 2004 - 18:19 #1
Nej, du er nødt til at teste, om der er match på hver gang ...

F.eks.
        regEx.Pattern = "(ln\()(.+)(\))"
        if regEx.Replace(Calc, "$1") = "ln(" then
          Val1 = regEx.Replace(Calc, "$2")
          Calc = "log(" & Val1 & ") = " & Math.Log(Val1)
        else
          regEx.Pattern = "(.+)(\+)(.+)"
          if regEx.Replace(Calc, "$2") = "+" then
            Val1 = regEx.Replace(Calc, "$1")

osv...
Avatar billede ducks Nybegynder
05. maj 2004 - 18:26 #2
Hvad så hvis man skal fx skal kunne skrive 2+ln(2)
Avatar billede roenving Novice
05. maj 2004 - 18:37 #3
Så må du sende den igennem flere gange !-)

-- placere dem i den rækkefølge, som regnereglerne tilsiger og medtage det, som er udenom !o]
Avatar billede ducks Nybegynder
05. maj 2004 - 20:32 #4
Kan du give et eksempel?
Avatar billede roenving Novice
05. maj 2004 - 20:51 #5
Jeg må nøjes med en ide til noget cirka-kode, for vb6 er jeg overhovedet ikke hjemme i:

regEx.Pattern = "(.*)(ln\()(.+)(\))(.*)"
if regEx.Replace(Source,"$1") & regEx.Replace(Source,"$5")<> "" then
  Calc = Calc(regEx.Replace(Source,"$1") & Calc(regEx.Replace(Source,"$2$3$4")) & regEx.Replace(Source,"$5"))

-- bemærk, at det jeg lægger op til er en rekursiv funktion, hvorfor jeg er nødt til at bruge det oprindelige input, og ikke kan bruge output-variablen ...

-- endvidere har jeg heller ikke i dette taget højde for, at du forsøger at returnere en ligning, hvor også resultatet er indeholdt, den skal du nok klare ved at have en 'ramme'funktion, som kalder den først tur ind, f.eks.

Function beregn(Source)
  beregn = Source & " = " & Calc(Source)
End Function
Avatar billede roenving Novice
05. maj 2004 - 20:54 #6
og der skal selvfølgelig være en else på ovenstående:

regEx.Pattern = "(.*)(ln\()(.+)(\))(.*)"
if regEx.Replace(Source,"$1") & regEx.Replace(Source,"$5")<> "" then
  Calc = Calc(regEx.Replace(Source,"$1") & Calc(regEx.Replace(Source,"$2$3$4")) & regEx.Replace(Source,"$5"))
else
  Calc = Math.Ln(regEx.Replace(Source,"$3"))

-- og jeg er heller ikke klar over om den form for check vil virke i Visual Basic ...
Avatar billede ducks Nybegynder
07. maj 2004 - 12:49 #7
Kan ikke helt hitte ud af det, så jeg hentede MagiCalc på www.planetsourcecode.com - Men hvis du ligger et svar, må du godt få point for din indsats :)
Avatar billede roenving Novice
07. maj 2004 - 16:31 #8
Velbekomme '-)

-- og ja, det ligner sådan noget, jeg tænkte du havde gang i !-)
Avatar billede roenving Novice
08. maj 2004 - 14:36 #9
-- og tak for point ;~}
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