На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Проверка орфографии для DOS на turbo-C. Как изменить размер словаря?
    Первым делом прошу прощения, если попал не по адресу.

    Есть старая программа проверки орфографии для DOS, написанная на turbo-C. В ней есть два внутренних словаря и один пользовательский (файл pers.dic). Для пользовательского словаря поставлено ограничение - 5000 слов. Как увеличить это количество раз в пять - до 20-30 тысяч слов?

    Программа отказывается добавлять лишние слова в пользовательский словарь во время работы и отказывается полностью открывать пользовательский словарь, если в редакторе добавить в него больше 5000 слов. Во время работы при превышении предела в 5000 слов программа выдает сообщение - ниже строка в декомпилированном файле lst:

    dseg:B600 aNeMoguVPamqtiN db 'НЕ МОГУ: в памяти нет больше места для новых слов (???)',0

    Может быть, кто-то еще помнит, как работают старые программы? Пожалуйста, подскажите, где стоит это ограничение и как его изменить до желаемого. Прилагаю декомпилированный файл lst и папку с самой программой (многотомный архив, потому что не позволены файлы свыше 100 кб).

    И еще один вопрос, который, не знаю, будет проще или сложнее. При нахождении незнакомого слова программа выводит меню, один из пунктов которого - "Метка". И в этом меню при нажатии на букву "М" или же при выборе стрелками пункта "Метка" программа добавляет астериск (*) в начале неопознанного слова и ищет дальше. Не может ли кто подсказать, как сделать, чтобы во время всей работы при обнаружении незнакомого слова программа вообще не выводила это меню, а просто ставила метку и продолжала искать дальше.
    Прикреплённый файлПрикреплённый файлvopros.part01.rar (87,89 Кбайт, скачиваний: 99)
    Прикреплённый файлПрикреплённый файлvopros.part02.rar (87,89 Кбайт, скачиваний: 97)
    Прикреплённый файлПрикреплённый файлvopros.part03.rar (87,89 Кбайт, скачиваний: 97)
    Прикреплённый файлПрикреплённый файлvopros.part04.rar (87,89 Кбайт, скачиваний: 93)
    Прикреплённый файлПрикреплённый файлvopros.part05.rar (87,89 Кбайт, скачиваний: 97)
    Прикреплённый файлПрикреплённый файлvopros.part06.rar (42,7 Кбайт, скачиваний: 97)
      versussusrev, все не так просто. 5000 взято, скорее всего, не с потолка. В 16-битном режиме ограничение 64К на сегмент твои 20К слов просто туда не влезут.
        Цитата shm @

        То есть лучше даже не пытаться расширить словарь? В любом случае, спасибо за ответ.

        Но тогда, может быть, посоветуете что-нибудь со вторым вопросом? Для меня практический результат будет тот же, просто прогоню программу по пяти разным словарям пользователя. В какое место программы надо ткнуть (или как его найти), чтобы программа вместо диалога тупо поставила звездочки на всех неопознанных словах (а в идеальном случае потом сразу же сохранила файл и закрылась)?
          Цитата versussusrev @
          посоветуете что-нибудь со вторым вопросом?

          Цитата versussusrev @
          И еще один вопрос, который, не знаю, будет проще или сложнее. При нахождении незнакомого слова программа выводит меню, один из пунктов которого - "Метка". И в этом меню при нажатии на букву "М" или же при выборе стрелками пункта "Метка" программа добавляет астериск (*) в начале неопознанного слова и ищет дальше. Не может ли кто подсказать, как сделать, чтобы во время всей работы при обнаружении незнакомого слова программа вообще не выводила это меню, а просто ставила метку и продолжала искать дальше.

          С такой формулировкой только к экстрасенсам.
          Сообщение отредактировано: shm -
            Цитата versussusrev @
            просто прогоню программу по пяти разным словарям пользователя

            Вы не раскрыли много вещей:

            1. Для чего эта программа?
            2. Составьте алгоритм ваших действий в программе (Что и куда вы вводите, что нажимаете, что получаете в результате. Надо понимать что вы вообще хотите получить в итоге)

            3. С ваших слов, даже если сделать два словаря по 5000, загнать их в оперативную память не получится. Если же вам нужен один проход по словарю чтобы найти что то в тексте - не вижу смысла вообще держать словарь в памяти, скорее всего вы что то не договариваете.


            Нашёл ответы в документации в архиве:
            Цитата

            Внутренний словарь составлен на основе частотных словарей и содержит 40 тысяч словарных записей; во время работы программы он размещается в оперативной памяти


            Походу, это и есть причина. В общем, без исходников я даже не представляю как вы сможете решить поставленную задачу...
            Сообщение отредактировано: VisualProg -
              Цитата VisualProg @
              Походу, это и есть причина. В общем, без исходников я даже не представляю как вы сможете решить поставленную задачу...

              Shm, к экстрасенсам обращаться уже пробовал, отправили сюда, сказали, что ответят здесь))

              VisualProg, я не собираюсь загонять в память два пользовательских словаря, а хочу менять их, проверяя текст сначала с одним, потом с другим, в результате в тексте выделятся слова, которых нет ни в том, ни в другом. Если говорить не о расширении словаря, а о втором вопросе, то ситуация такая.

              У меня есть на входе текст с ошибками. При работе в программе проверки ошибок я ставлю перед каждым неопознанным словом астериск (когда вылазит соответствующее меню при обнаружении неправильно написанного слова). После чего программа сохраняет файл с этими астерисками. Я хочу, чтобы программа без моего участия просто поставила астериски на всех неопознанных словах.

              Я декомпилировал текст программы. В нем, как я понимаю, есть разветвители, и когда на экране вылазит меню с одним из вариантов - поставить астериск или сделать что-то другое, то программа ждет указаний, на какую метку ей перейти - поставить астериск или сделать что-то другое. Я хотел бы узнать, можно ли в декомпилированном тексте программы сделать так, чтобы программа не ожидала от меня команды и не показывала меню, а сама все время переходила на ту метку, где она ставит астериск. То есть вместо перехода на метку, где показывается меню, переходила на метку, где ставится астериск.

              Конкретно, не может ли кто подсказать, где именно в декомпилированном тексте программы указывается, что найдено неопознанное слово и теперь надо показать меню? И где стоит метка, на которую надо перейти, чтобы миновать стадию выбора - то есть метка, при переходе на которую программа ставит астериск и продолжает поиск.

              Может быть, так понятнее получилось объяснить?
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0262 ]   [ 22 queries used ]   [ Generated: 28.03.24, 16:47 GMT ]