Jak umożliwić użytkownikowi definiowanie warunków?

0

Powiedzmy, że mamy 100 stron tekstu do przefiltrowania i chciałbym, aby użytkownik mógł sam sobie utworzyć reguły filtra

np.

  • strona zawiera słowo "abcdefgh"
  • strona ma >= 1500 znaków
  • n-te słowo to "xyz"
  • ...

Chciałbym aby użytkownik mógł sobie dodawać ich ile chce, jakie chce itd.

Jak takie coś ma wyglądać?

0

Czytałem parę razy i szczerze mówiąc nie wiem, czy ja czegoś nie łapę, czy Ty totalnie nie napisałeś, o co chodzi.

Kategoria to Newbie - czyli nic nie mówi o języku/technologii.
Tagi - podobnie, nie dają żadnej wskazówki.
W treści również nie znalazłem niczego pomocnego, piszesz o jakimś tekście do przefiltrowania, ale nie podajesz czy to PDF, DOC, HTML czy może tekst do przetworzenia w jakiejś pisanej przez Ciebie aplikacji. Daj więcej szczegółów, bo z tego co napisałeś (mimo, że edytowałeś posta 15 razy) za wiele nie wynika (a przynajmniej dla mnie - może są tutaj ludzie, którzy ogarną tak podany temat).

0
cerrato napisał(a):

Czytałem parę razy i szczerze mówiąc nie wiem, czy ja czegoś nie łapę, czy Ty totalnie nie napisałeś, o co chodzi.

Kategoria to Newbie - czyli nic nie mówi o języku/technologii.
Tagi - podobnie, nie dają żadnej wskazówki.
W treści również nie znalazłem niczego pomocnego, piszesz o jakimś tekście do przefiltrowania, ale nie podajesz czy to PDF, DOC, HTML czy może tekst do przetworzenia w jakiejś pisanej przez Ciebie aplikacji. Daj więcej szczegółów, bo z tego co napisałeś (mimo, że edytowałeś posta 15 razy) za wiele nie wynika (a przynajmniej dla mnie - może są tutaj ludzie, którzy ogarną tak podany temat).

To, czy jest to PDF/DOC/HTML jest najmniej ważne - dane są w zmiennej

np. Lista stron.

Weźmy jakiś pseudokod

foreach (var strona in strony)
{
    if (strona.Contains("word1"))
    {
        do something
    }
}

Lecz tych ifów może być 0, 10, 100 - jak tam user sobie chce, a dodatkowo mogą być czymś innym niż tylko .Contains

np. strona.Length > 100

Ten sam problem, lecz w innych słowach.

I'm trying to figure out a way to allow users of my application to define their own queries or filters that can be applied to a collection. I want to eventually provide an intuitive user interface to create these filters (see image below), but initial it would be OK if a user had to type of a text query string. I'll also need to be able to serialized these user defined queries to a string so I can save them with the rest of the project information.

Example UI alt text http://dl.dropbox.com/u/113068/filterUI.jpg

I'm looking for the type of functionality you would get out of something like a SQL query such as numeric conditions (less than, greater than), string condition (contains, starts with, ends with), or boolean condition (true or false). I'd also like to be able to group condition using boolean logic like OR, AND, and NOT.

I started drawing out how I would do this from scratch using classes such as NodeFilter, AbsNodeCondition, NodeStringCondition, NodeConditionOrJoin etc.. etc.. But I feel like I'm reinventing the wheel, especially when there's something like Linq available, which I haven't had a chance to spend much time with.

Could I somehow allow a user to enter a Linq to objects query in a text box, and then programaticly turn the string into a real Linq query that can be applied to my collection? Or is there some other way I could allow the user to create and save a query? I'll also need a way to serialize the filter/query to a string so I can save it with the rest of the program information.

0

po wejściu na podany link dropbox'a - Error (404), We can't find the page you're looking for.

Poza tym ja bym nie robił 100 if'ów, ale prędzej wrzucił warunki do jakiejś tabeli/listy i po kolei leciał foreach przez tą listę.

0
cerrato napisał(a):

po wejściu na podany link dropbox'a - Error (404), We can't find the page you're looking for.

Wezmę jakiś przykład z Google

l0tOb.png

Poza tym ja bym nie robił 100 if'ów, ale prędzej wrzucił warunki do jakiejś tabeli/listy i po kolei leciał foreach przez tą listę.

Tak, lecz jakiś pomysł na zakodowanie takiej klasy, która obsługiwałaby te warunki?

0

No dobra - tylko Ty tutaj cały czas mieszasz logikę (czyli to, o czym pisałeś wcześniej - to przykładowe 100 if'ów) z user interface.
O ile jeszcze o samej logice można gadać abstrakcyjnie (chociażby to,co napisałem powyżej - zamiast 100 ifów wrzucić to do jakiejś listy/tabeli), to obrazek który podałeś dla mnie jest raczej ściśle związany z technologią, w jakiej piszesz aplikację i się podciąga zdecydowanie pod kwestię UI.

0
cerrato napisał(a):

No dobra - tylko Ty tutaj cały czas mieszasz logikę (czyli to, o czym pisałeś wcześniej - to przykładowe 100 if'ów) z user interface.
O ile jeszcze o samej logice można gadać abstrakcyjnie (chociażby to,co napisałem powyżej - zamiast 100 ifów wrzucić to do jakiejś listy/tabeli), to obrazek który podałeś dla mnie jest raczej ściśle związany z technologią, w jakiej piszesz aplikację i się podciąga zdecydowanie pod kwestię UI.

Ale przecież to musi być jakoś zrealizowane "pod spodem", czyż nie?

jest raczej ściśle związany z technologią

W sumie, racja. Interesuje mnie .NET/C#

0

jakiś pomysł na zakodowanie takiej klasy, która obsługiwałaby te warunki

Pomysłów mam kilka, ale najpierw napisz, czy będzie jakaś określona lista możliwych sprawdzeń/warunków (określony zbiór poleceń - np. "równy", "mniejszy", "zawiera", "n-ty wyraz" itp.), czy pełna dowolność? Jeśli użytkownik ma mieć możliwość definiowania swoich "sprawdzeń" - w jaki sposób ma je opisywać? Jeśli ma korzystać jedynie z pewnej listy - musiałbyś ją opracować.
Czy chcesz robić zagnieżdżone porównania - tak, jak na rysunku, czy jedynie proste?

0
cerrato napisał(a):

jakiś pomysł na zakodowanie takiej klasy, która obsługiwałaby te warunki

Pomysłów mam kilka, ale najpierw napisz, czy będzie jakaś określona lista możliwych sprawdzeń/warunków (określony zbiór poleceń - np. "równy", "mniejszy", "zawiera", "n-ty wyraz" itp.), czy pełna dowolność? Jeśli użytkownik ma mieć możliwość definiowania swoich "sprawdzeń" - w jaki sposób ma je opisywać? Jeśli ma korzystać jedynie z pewnej listy - musiałbyś ją opracować.
Czy chcesz robić zagnieżdżone porównania - tak, jak na rysunku, czy jedynie proste?

Tak, możliwe kryteria i ich opcje (np. większy/mniejszy/równy/contains/equals/etc) będą zdefiniowane

Raczej te "proste" na razie :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1