Toon posts:

Randvoorwaarden uitlezen uit een database

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik ben bezig met het opstellen van een database met daarin regels. Deze regels zullen vervolgens moeten worden uitgelezen. Een variabele zal vervolgens naast deze regels worden gelegd en er zal worden gekeken of deze eraan voldoet, zo ja voer ik een actie uit zo nee ook.
Dit is de theorie, hoe ziet dit er in de praktijk uit:
In de database zou zoiets kunnen staan als: >100 en <100 dit zijn de regels, deze zijn als string opgeslagen in de database. Vervolgens heb ik een variabele 99. Nu wil ik gaan controleren of 99 > 100? of dat 99 < 100. Alleen je kunt niet die regels uitlezen en direct gebruiken, omdat dit stringetjes zijn. Weet iemand of je dit kunt converteren? of een andere mogelijkheid? Opzich ik zou dit string stukje bij beetje kunnen gaan uitlezen, maar ik hoopte eigenlijk dat er een andere makkelijkere mogelijkheid voor zou zijn. Ik wil dit gaan gebruiken om een beslissingsboom te maken.

Alvast bedankt _/-\o_

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 29 April 2003 @ 09:30:
Weet iemand of je dit kunt converteren?
Elke zichzelf respecterende database heeft wel een aantal conversie functies dus dat moet het probleem niet zijn. Ik denk dat je eerder even moet nadenken waar je naar wil converteren (er van uitgaande dat je randvoorwaarden uit verschillende types zullen bestaan) en hoe je dat in je logica wil opnemen.

Today's subliminal thought is:


Verwijderd

Topicstarter
Nou in principe zou ik het willen converteren naar "iets" waaraan ik direct een andere variabele zou kunnen vergelijken. Dus dat ik het als volgd zou kunnen gebruiken:
if ($variabele '> 100') //stukje tussen '' zou dan uit de database moeten komen.
{
actie;
}

Verwijderd

Topicstarter
Nou het keyword is waarschijnlijk expressie parser...... zoek ik ook even verder mee

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Sterker nog: het is in feite een functie parser. Je moet een beetje afstappen van die sourcecode view, waarin de randvoorwaarde tekst gewoon in de code staat. Dat werkt niet zo.

Jouw randvoorwaarden zijn eigenlijk functies: je stopt er een Int in en er komt een boolean uit. Als je dit echt zo wilt aanpakken via een eigen syntax, waarbij de tekst in een database staat, zal je een syntax voor die functies moeten ontwerpen. De tekst kan je daarna parsen naar een boom, die je kan interpreteren in de taal waarin je programmeert.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
bedankt voor je antwoord, kan ik hieruit opmaken dat ik vanuit de database dus een functie genereer (aan de hand van de inhoud van de database) en deze functie daarin gooi ik de variabele die ik wil vergelijken met een boolean als resultaat? (is dit überhaubt mogelijk in php, dat is de taal waarin ik het wil gaan maken, icm MySQL)

[ Voor 16% gewijzigd door Verwijderd op 29-04-2003 10:07 ]


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Idd, dat is precies wat er eigenlijk gebeurd. Vergeet echter niet dat dit erg veel werk is: je moet een syntax maken voor je voorwaarden, je moet de functies parsen, interpreteren enz.

Je geeft zojuist aan dat je met PHP werkt. Omdat PHP zelf ook geinterpreteerd wordt en er een eval functie is, kan je misschien beter overwegen om PHP fragmenten op te nemen. Voor vele andere talen zijn er ook scripting engines. Deze kan je beter gebruiken dan een volledig eigen oplossing.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Het is gelukt, hierbij een stukje php code. Het komt wel niet uit een database, maar dat is zo om te bouwen. Volgende voorbeeld werkt met een string, die komt uit een tekstfield: In dit tekstfield kun je invullen bijvoorbeeld: "< 100" of "> 100" of "== 100") en vervolgens controleert de code of dit klopt.

$test = $tekstField; //uitlezen van het tekstfield en plaatsen in de variabele test
$cadena="if (99 $test) echo \"Dit is correct 99 is inderdaad $test\"; else echo \"Helaas dit klopt niet\";"; //het maken van een string die php code bevat
$x=eval($cadena); //string omzetten naar php code en uitvoeren.

Koen
Pagina: 1