Как организовать сопоставление "один к нескольким"?
И надо, чтобы каждому такому варианту был бы сопоставлен именительный падеж.
Как это можно сделать. В каком виде и где хранить эти данные?
p.s. Пока я сохраняю все в текстовом файле в виде отдельных строк
Иванов
Иванова
Иванов
Иванову
Иванов
Ивановым
Иванов
Т.е. если происходит совпадение данных в моей текстовой переменной с какой-то строкой, то для другой переменной брать текст следующей строки и т.п. Но это не оч. правильно, т.к. можно ошибиться с подсчетом строк и следующая строка окажется неверной. Можно ли как-то иначе организовать такую проверку?
вот сссылкаhttp://www.delphimaster.ru/articles/search.html
ОК. Начинаю читать!
И надо, чтобы каждому такому варианту был бы сопоставлен именительный падеж.
Как это можно сделать...
На всякий случай замечу, что даже самый обширный словарь с самым лучшим индексом не позволит Вам отличить друг от друга совпадающие формы написания фамилий женского и мужского родов в разных падежах.
Пример:
- жена Иванова (муж. р., род. п.);
- Анна Иванова (жен. р., им. п.);
- назначаю Иванова (муж. р., вин. п.).
Кроме того, существуют фамилии:
- несклоняемые вообще (Нестеренко);
- склоняемые только в мужском роде (Дибич).
Во всех указанных случаях для правильной идентификации рода потребуется выполнять анализ целого фрагмента текста, в котором встречается фамилия.
А как все же должен выглядеть двумерный массив данных? Может это быть простой текстовый файл (чтобы можно можно было при случае "блокнотом" его открыть и что-то подправить, если потребуется)?
Спасибо.
Хорошо. А чем определять разные ячейки? Знаком табуляция или любым знаком, который не должен бы встретиться в тексте?
Например так:
Иванова¦Иванов
Иванову¦Иванов
Иванове¦Иванов
Ивановым¦Иванов
Петров¦Петров
Петрову¦Петров
Петровым¦Петров.
...
?
Т.е. по логике хотелось бы иметь данные в виде таблицы из двух колонок. Если значение текстовой переменной совпадает с текстом в одной из левых ячеек, то в переменную записать данные правой ячейки данной строки...
Вот как это можно описать?
Пока я делаю так:
Open mySlovar For Input As #1
Do While Not EOF(1)
Line Input #1, TextLine
If TextLine = Mytxt Then ' если вхождение найдено,
'то взять текст из сл. строки
Line Input #1, TextLine1: Mytxt = TextLine1: Exit Do 'записали название
End If
Loop
Close #1
Недостаток в том, что при ручном внесении исправлений или дополнений в такой "одноколонный" файл легко ошибиться строкой, и тогда в переменной окажутся неверные данные. Да и визуальный контроль затруднен. А если данные как бы в виде таблицы, то было бы все гораздо более наглядно.
Петров:Петрова,Петрову,Петровым.
upd: таблицей? легко! (=
условно например так:
|им. падеж | род. падеж | ... |
--------------------------------
|Иванов | Иванова | ... |
|Петров | Петрова | ... |
--------------------------------
Конечно так лучше. Но не понятно, как тогда искать "неправильности" и сопоставлять им "правильности"? Т.е. как программе объяснить, что символы между палочками (¦) есть как бы ячейки? И чем по этим чейкам перескакивать? Я пока силен только в такой конструкции:
Line Input #1, TextLine
...
а она, похоже, не подойдет для такого варианта организации данных.
Ага, понял направление мысли. Буду пробовать. Спасибо большое.
p.s. интересно, а если считывать не построчно и искать в "line" вхождения Instr, а обращаться к такому файлу как к матрице с ячейками, может быть будет быстрее работать процедура? или разница во времени окажется незаметна? Я где-то вычитал, что файл с произвольным доступом обратывается быстрее, чем с последовательным (если я правильно вижу связь).
p.s.s.
Столкнулся с тем, что возникает необходимость дописывать данные. Т.е. необходимо пополнять файл-словарь. Если какой-то падеж для какой-то фамилии не указан, то новые данные надо занести. А сделать эту запись возможно только в конец файла. А хотелось бы найдя нужную строку дописать ее недостающим падежом. Можно ли так сделать?
Для обработки списков в ОЗУ очень удобно использовать объект [color=blue]Dictionary[/color].
Для обработки списков в ОЗУ очень удобно использовать объект [color=blue]Dictionary[/color].
структура хороша. Но я эти вхождения выуживаю из вордовского дока и тащить в Ексель вроде как неоправдано сложно. А кроме того. Как биться с текстовым файлом примерно понятно (из-под ворда), а если работать с данными в виде таблиц в Екселе, то это начать и кончить - не знаю, даже, с чего начать изучать эту тему. Т.е. сложно будет.
Пока, навреное, буду дописывать в конец файла, как и предполагает комадна open #1 for append, а потом уже руками тащить в нужные строки (структура от @pixo $oft, конечно).