Avatar billede nielslbeck Nybegynder
05. november 2002 - 19:24 Der er 5 kommentarer og
2 løsninger

"Udregning af streng"

Nogen der kender en klasse i .NET som kan benyttes til at "udregne værdien af en streng". Med udregning af streng mener jeg f.eks. udregning af udtrykket "(50+300)*1,26" så man får tallet 441 ud... Nogen der kender sådan en klasse? Hvis der ikke er en standardklasse, må jeg jo selv lave én - men det ville da være lettest hvis den var der :-)
Avatar billede arne_v Ekspert
05. november 2002 - 19:32 #1
Jeg kender ikke C#, men jeg tvivler meget på, at
der er sådan en funktion. Den er ret speciel.

Imidlertid er det en kendt problem-stilling.
Og løsningen er også kendt.

Man:
1) Konverterer fra streng til codes
2) Man konverterer fra infix til postfix
  (også kendt som omvendt polsk notation)
  (50+300)*1,26 => 50 300 + 1.26 *
3) Man beregner udtrykket.

#1 er en simpel parsning.

#2 laves v.h.a. en stack og værdier for
operator precedence.

#3 laves også v.h.a. en stack.
Avatar billede jakobandersen Nybegynder
05. november 2002 - 19:47 #2
C# har ikke noget indbygget funktionalitet til dette, men da vi nu arbejder i et framework med mulighed for at benytte flere sprog så kan du jo passende bruge JScript's eval funktion, ved at lave en klasse der stiller denne til rådighed f.eks.:

Eval.js
class WorkAround
{
  function CSharpEval(minStreng : String)
{
    return eval(minStreng )
}
}

Nu kan du så kalde WorkAround.CSharpEval("(50+300)*1,26") fra din C#-kode. ved blot at importere WorkAround klassen(fra en DLL).

Men pas på med ikke at gøre denne funktion direkte til rådighed da den også kan eksekvere kode!!
Avatar billede nielslbeck Nybegynder
05. november 2002 - 20:31 #3
Kanon! Hvorfor tænker jeg aldrig??? Har tit brugt eval() i JScript - tænkte bare ikke lige på, at jeg kunne lave en .js i .NET og så bruge den - men selvfølgelig kan man det - jeg ELSKER .NET!!!

arne_v>> Det er en ret speciel metode, ja, men tænkte nok den fandtes... kender godt metoden til at udregne sådan et udtryk, men tænkte bare, at en indbygget funktion nok var hurtigst :-)

moonduck>> Gider du ikke lægge et svar?
Avatar billede jakobandersen Nybegynder
05. november 2002 - 20:36 #4
Svar...
Avatar billede nielslbeck Nybegynder
05. november 2002 - 20:37 #5
Tak til jer begge...
Avatar billede jakobandersen Nybegynder
05. november 2002 - 20:37 #6
Og husk nu at være kritisk med hvad der sendes til din Eval, lav evt. et tjek der afviser udtrykket hvis det "minder om" kode og ikke et udtryk.
Avatar billede nielslbeck Nybegynder
05. november 2002 - 20:39 #7
Yeps, det må jeg huske... men det bliver også bare et udtryk som skal beregne en pris på en række produkter - strengen bliver højest 16 tegn lang - så det bliver også begrænset hvor meget kode der kan indtastes. Desuden er det en totalt ikke-nørdet ejer af en webbutik som skal indtaste udtrykket, så der er nok ikke nogen fare. Men tak for tippet :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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