Toon posts:

Deel van zin kopieren in plaats van hele zin van een list.

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik maak een vraag antwoord programma in c# waarbij je een windows notificatie krijgt met een antwoord als de vraag is gekopieerd.

Voorbeeldje.
1+1

Als ik dit kopieer zal je dan een windows notificatie met de betreffende vraag 1+1 krijgen plus het betreffende antwoord.

Nu wil ik dat mijn programma ook een deel van de vraag kan kopieren en daarbij kijkt waarbij het deel van de zin het best matched bij me vraag zitten uit mijn list.

Zodat je ook een windows notificatie krijgt als je maar een deel van de zin uit de list kopieerd
Ik heb al wel eens gekeken naar de startwith methode maar ik heb meer dan 700 vragen in mijn list.
Dus ik wil een efficiente manier om te kijken welke deel van de zin het best matched met de gehele vraag.
Ik denk dat ik een StartWith methode moet gebruiken maar hoe ik het moet doen weet ik tot op heden helaas nog niet precies. Misschien kan iemand me hierbij helpen.

dit is mijn code.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//*SNIP* BLABLA

namespace it
{
    public partial class Form1 : Form
    {

//*SNIP* BLABLA

        //Make some global variables so we can access them somewhere else later
        //This will store all Questions and Answers
        //In here will be the Questions and Answers
        List<question> questionList = new List<question>();

        private void Form1_Load(object sender, EventArgs e)
        {
//*SNIP* BLABLA

            //Add question/answer to list
            //hoofdstuk 3 it
            question newQuestion = new question("When a computer is being assembled, which action can be taken to help eliminate cable clutter within a computer case?", "Install a modular power supply.*");
            questionList.Add(newQuestion);
            newQuestion = new question("What is the best way to apply thermal compound when reseating a CPU?", "Clean the CPU and the base of the heat sink with isopropyl alcohol before applying the thermal compound.*");
            questionList.Add(newQuestion);

//** SNIP ** paar honderd regels van hetzelfde

            newQuestion = new question("Which three factors are reasons for a company to choose a client/server model for a network instead of peer-to-peer? (Choose three.)", "The company network requires secure access to confidential information.*The users need a central database to store inventory and sales information.*The data gathered by the employees is critical and should be backed up on a regular basis.*");
            questionList.Add(newQuestion);
            newQuestion = new question("What is a characteristic of a WAN?", "It connects multiple networks that are geographically separated.*");

        }

        private void GetAnswer(string clipboardText)
        {
            //Loop through all questions and answers
            foreach (question q in questionList)
            {
                //If we have found an answer that is exactly the same show an Notification
                if (q._question == clipboardText)
                {
                    ShowNotification(q._question, q._answer);
                }   
            }
        }

//*SNIP* BLABLA

    }
}


alvast bedankt

[ Voor 105% gewijzigd door RobIII op 01-03-2019 14:16 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Ik denk dat je het beste kan kijken naar SQL Server icm de fulltextsearch functie van SQL Server.

Acties:
  • 0 Henk 'm!

  • Sleepkever
  • Registratie: Juni 2007
  • Laatst online: 19:04
ocdaan schreef op vrijdag 1 maart 2019 @ 13:53:
Ik denk dat je het beste kan kijken naar SQL Server icm de fulltextsearch functie van SQL Server.
Waarom? Het is een C# applicatie met 700 entries max, waarom zou je daar een overkill SQL server als dependency aan willen hangen?

Je kan wellicht wel de zinnen naar een externe text file toe plaatsen en die inlezen bij het opstarten. Maakt het later wijzigen van die dingen ook weer makkelijker ;)

Ik denk dat String.Contains toch je beste gok is hier. Vraag is dan alleen wat je doet als iemand bijvoorbeeld "Which type of" kopieert, dat levert dan 2 matches op. En dan?

Kan je "het best matched" even verder defineren? Waar verwacht je allemaal mee om te willen gaan? Alleen partial matches? Moet hij ook om kunnen gaan met typo's / hoofdletter verschil. Of ook als de vraag op een andere manier geformuleerd word. Kan allemaal wel, maar het is wel een oplopende schaal van complexiteit. Wat is voor jou toepassing vereist?

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je nou eens, ook in je vorige topic, begint met enkel relevante code te posten in plaats van telkens enorme lappen code die totaal niet boeit. En dat geldt dan ook meteen voor je probleembeschrijving. Is het relevant dat je een "notificatieapplicatie" probeert te maken met popups die elke dinsdag groen worden en op oneven maanden ondersteboven worden weergegeven? Je probleem is dat je strings zoekt die matchen op een bepaald criterium; de rest is totaal irrelevant voor je probleem. En waarom zeg ik dat (zo vrij recht-door-zee)? Omdat ik het idee heb dat je zélf daardoor ook door je bomen het bos niet meer ziet. Breek je probleem in deelproblemen en die kleinere stukjes breek je ook weer in deelproblemen dáárvan. En concentreer je dan op 't oplossen van dat kleine probleempje net zo lang tot je alle problemen opgelost hebt.

Daarbij zou ik eens even terug naar de basis gaan en e.e.a. in classes stoppen die elk hun eigen verantwoordelijkheid hebben (SOLID) i.p.v. een mishmash aan code in een enkel form te proppen.

Anyway; ik heb je code van 293 regels code teruggebracht naar 50 (en dat is nog steeds behoorlijk aan de royale kant). Probeer volgende keer je code te beperken tot een 'handvol' (zeg max 10, 20) regels code. We zitten hier niet om je code te debuggen of kant-en-klare oplossingen aan te dragen; we wijzen je hooguit in de juiste richting ;) Ik zou de vragen sowieso op z'n minst naar een text/xml/json/csv/whatever file halen; dan kun je je vragen ook veel makkelijker aanpassen zonder je applicatie opnieuw te moeten compilen/deployen. Een RDBMS (SQL Server (Express), MySQL, SQLite, PostGres, ...) is een optie maar inderdaad waarschijnlijk behoorlijk overkill. Maar doe jezelf een lol en leer LINQ (begin hier); daarmee schrijf je "SQL-achtige" code i.p.v. allerlei (geneste) for-lussen:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
var lines = new[]
{
    "Dikkertje Dap klom op de trap 's morgens vroeg om kwart over zeven",
    "Om de giraf een klontje te geven",
    "Dag giraf zei Dikkertje Dap weet je wat ik heb gekregen",
    "Rode laarsjes voor de regen",
    "'t Is toch niet waar zei de giraf",
    "Dikkertje Dikkertje Dikkertje Dikkertje ik sta paf"
};

// Find all lines containing the word "giraf"
var results = lines.Where(l => l.Contains("giraf", StringComparison.OrdinalIgnoreCase)).ToArray();

[ Voor 54% gewijzigd door RobIII op 01-03-2019 14:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij