Avatar billede mikl-dk Nybegynder
21. november 2004 - 15:20 Der er 2 kommentarer og
2 løsninger

Regler vha. klasser

Hej,

Jeg har lavet et program, der checker, hvad der er i udklipsholderen, og vha. IF-sætninger finder ud af, hvad det er. Programmet bruges til at tracke forsendelser med, og IF-sætningerne finder så ud af, om det er et trackingnummer, og hvilket firma, det er sendt med - og derudfra findet det ud af, hvilke hjemmeside, nummeret skal tracket på (og det sker herefter ved at åbne en hjemmeside, og putte trackingnummeret ind vha. en GET-variabel, hvor det, der var i udklipsholderen så klistres ind).

Et eksempel er:
If (Strings.Left(strClipboardContent, 2) = "1Z" And Strings.Len(strClipboardContent) = 18) Or (Strings.Left(strClipboardContent, 1) = "M" And IsNumeric(Strings.Right(strClipboardContent, 10)) And Strings.Len(strClipboardContent) = 11) Then
Shell("C:\Program Files\Internet Explorer\iexplore.exe " & strClipboardContent)
End If

(Koden er VB.NET, men det er jo - næsten - det samme, og skal lave det "nye" program i C#).

I stedet for at lave et hav af IF-sætninger, er min idé nu at oprette en regelklasse, og så lave en instans for hver regel, og så på den måde gøre det lidt mere "rigtigt". Problemet er, at jeg ikke aner, hvordan det skal gøres i praksis!

I klassen skal jeg have noget med længden, starten og slutningen af stengen. Ydermere skal der være et felt til URL, som skal benyttes, hvis reglen bliver opfyldt. Lidt start-hjælp ville være skønt :-)

/ mikl-dk
Avatar billede driis Nybegynder
21. november 2004 - 17:30 #1
Det er helt oplagt at bruge RegularExpressions til dette.

Jeg ville nok lave en "regel" klasse der tager en regular expression som parameter i constructoren. Den skal så have en test metode, som kan bruges til at returnere hvorvidt en given streng overholder "reglen". I regel-klassen kan du passende implementere en metode der først tester en streng, og derefter sørger for redirect hvis strengen overholder kriterierne.

Du kan så bruge regel-klassen direkte, eller du kan lave en klasse for hver regel, som arver fra regel-basisklassen. Om det er smart at gøre det ene eller andet vil jeg lade dig vurdere.
Avatar billede driis Nybegynder
21. november 2004 - 17:30 #2
Eksempel:

using System;
using System.Text.RegularExpressions;

namespace RuleTest
{
    /// <summary>
    /// Summary description for Rule.
    /// </summary>
    public class Rule
    {
        private Regex regex = null;
       
        public string RuleExpression
        {
            get
            {
                if ( regex == null )
                    return String.Empty;
                else
                    return regex.ToString();
            }

            set
            {
                if ( value == null )
                    throw new NullReferenceException("Null not allowed in Rule::RuleExpression");

                regex = new Regex(value);
            }
        }
       
        public Rule(string ruleExpression)
        {
            RuleExpression = ruleExpression;
        }

        public bool Test(string testString)
        {
            if ( regex == null )
                return false;
            else
                return regex.Match(testString).Success;
        }

        public override string ToString()
        {
            if ( regex != null )
                return regex.ToString();
            else
                return base.ToString();
        }


    }

    public class MyRule: Rule
    {
        public MyRule() : base(DEFAULT_EXPRESSION) {}

        private const string DEFAULT_EXPRESSION = "N[A-Z0-9]{7}";
    }
}
Avatar billede driis Nybegynder
23. november 2004 - 19:09 #3
Kan det bruges ?
Avatar billede mikl-dk Nybegynder
23. november 2004 - 20:10 #4
Det tror jeg, har kigget det igennem, og det ser fornuftigt ud. Jeg får dog nok først tid til at gennemprøve det ordentligt i morgen!
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