Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Jeg henter noget tekst der blandt andet indeholder nogle hjemmelavede tags fx ##ValueClass("Param1", "Param2").Value## hvor ValueClass er en C# klasse. Så jeg vil gerne kunne erstatte selve tagget med værdien af "eksekveringen" af det der står i tagget.
Den tekst jeg henter ud kan indeholde forskellige klasser. Det er ikke altid ValueClass.
Hvis du forestiller dig at teksten der bliver hentet ud er: "Der var en gang en mand som boede i ##StandardValue("Adresse", 2006)##. Han var ansat som tjenestemand og fik derfor ##BonusProcent("Tjenestemand", 10)##. Det var han meget glad for!"
Så vil jeg gerne kunne hente den tekst, finde tags og eksekverer dem og få værdien, og så erstatte selve tagget i teksten. Så fx ##BonusProcent("Tjenestemand", "Las Vegas department")## bliver erstattet af "15%" og ##StandardValue("Adresse", 2006)## bliver erstattet af "1st street, 12345 Las Vegas".
Hold da op det er besværligt. Kan det virkelig ikke gøres nemmere?
I PHP ville man bare gøre noget ligende sådan her: $value = eval(MetodeKald("Param1", Param1)); fx. eval(BonusProcent("Tjenestemand", 10)) og så ville $value være fx. 15%.
using System; using System.Reflection; using System.Text.RegularExpressions; using Microsoft.JScript; using Microsoft.JScript.Vsa;
public class Test { private static GlobalScope gs = VsaEngine.CreateEngineAndGetGlobalScope(false, new string[] { Assembly.GetExecutingAssembly().GetName().Name }); public static string Evaluate(string s) {
return Eval.JScriptEvaluate(s, gs.engine).ToString(); } public static string Address(int id) { return "DOTNET vej nr. " + id; } public static int BonusPercent(int salaryclass) { return (salaryclass - 5) / 2; } public static void Main(string[] args) { // simpelt Console.WriteLine(Evaluate("Test.Address(77)")); Console.WriteLine(Evaluate("Test.BonusPercent(18)")); // kombineret med regex string s = "bor ##Address(77)## og får ##BonusPercent(18)##% i bonus"; Console.WriteLine(s); string s2 = s; MatchCollection res = Regex.Matches(s,"(##)(.*?)(##)"); for(int i = 0; i < res.Count; i++) { s2 = s2.Replace(res[i].Groups[0].Value,Evaluate("Test." + res[i].Groups[2].Value)); } Console.WriteLine(s2); } }
Det er spændende ud. Jeg får dog følgende fejl når jeg prøver at teste det: The type or namespace name 'JScript' does not exist in the namespace 'Microsoft'
Jeg kan se at jeg kun har: CSharp, SqlServer, VisualBasic, VisualC og Win32 i Microsoft-namespacet.
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.