Grigory Smirnov, я однажды пытался прикрутить такую штуку к программе на WxWidgets, но в библиотеке беда с валидаторами. Свой написал, так там тоже не срослось, так как ограничить ввод получилось, а вот запретить вставку из буфера не вышло. Я событие вставки перехватывал, если там был этот символ, то обрабатывал, но при попытке прервать вставку всё получалось, изменить другой объект тоже, а вот если попытаться изменить ту форму в которубю вставили невалидный текст, то coreDumped. Забил на это, т.к. не нашел документации, а всю либу перекапывать неохота, стал перед сохранением проверять и вырезать символы, если не валидные.
Как у тебя анекдоты добавляются? Сам список, если автоматом, то надо такой алгоритм:
Считал анекдот, занёс спецсимвол разделитель. И когда будешь их программой считывать, то бери от предыдущего спецсимвола, до следующего, это так, грубо, на вскидку. Не забывай только тогда либо файл начинать со спецсимвола и заканчивать тоже спецсимволом, либо проверяй начало и конец файла.
Сначала со структурой файла разберись. Можно такую (спецсивол меняю на $) и жать потом, скажем zip-ом.
$1$1$
Текст анекдота без этого спецсимвола.
$2$1$
Следующий анекдот
Первая цифра - номер анекдота, вторая - группа (из твоей нумерации про блондинок, программистов и т.д.).
Но тогда у тебя возникает проблема быстрого индексирования анекдотов по номерам и категориям.