Суббота, 21 Дек 2024, 21:21
Uchi.ucoz.ru
Меню сайта
Форма входа

Категории раздела
Высшая математика [11]
Экономическая социология [95]
Основы Менеджмента [64]
Бухгалтерский учёт [157]
Философия [163]
Мировая Экономика [603]
Бизнес планирование [29]
Финансирование и кредитование инвест [105]
Ценообразование [46]
Гражданское право [196]
Права Человека [173]
Основы Маркетинга [207]
Основы энергосбережения [55]
Информатика [0]
Экология и устойчивое развитие [0]
Физика для студентов [0]
Основы права [0]
Политология [0]
Не стандартные примеры на Delphi [169]
Примеры на Delphi7 [108]
Алгоритмы [94]
API [110]
Pascal [152]
Базы Данных [6]
Новости
Чего не хватает сайту?
500
Статистика
Зарегистрировано на сайте:
Всего: 51653


Онлайн всего: 27
Гостей: 27
Пользователей: 0
Яндекс.Метрика
Рейтинг@Mail.ru

Каталог статей


Главная » Статьи » Студентам » Не стандартные примеры на Delphi

Работа с индексами Clipper'а
Валентин Чесноков
пишет:
Посылаю кое-что из своих наработок:

NtxRO - Модуль чтения clipper-овских индексов. Удобен для доступа к данным
Clipper приложений. Предусмотрено, что программа может работать с
индексом даже если родное приложение производит изменение в индексе
NtxAdd - Средство формирования своих Clipper подобных индексов. Индексы
НЕ БУДУТ ЧИТАТЬСЯ Clipper-приложениями (кое-что не заполнил в
заголовке, очень было лениво, да и торопился)
До модуля удаления из
Индекса ключей все никак не дойдут руки. Меня очень интересуют аналогичные
разработки для индексов Fox-а Кстати реализация индексов Clipper наиболее близка
из всех к тому, что описано у Вирта в "Алгоритмах и структурах данных"

Я понимаю, что мне могут возразить, что есть дескать Apollo и т.п., но я
считаю что предлагаемая реализация наиболее удобна ТАК КАК ИНДЕКСЫ НЕ ПРИВЯЗАНЫ
К НАБОРУ ДАННЫХ (а лишь поставляют физические номера записей) это позволяет
делать кое-какие фокусы (например перед индексацией преобразовать значение какой
нибудь функцией типа описанной ниже, не включать индексы для пустых ключевых
значений в разреженных таблицах, строить индексы контекстного поиска, добавляя
по нескольку значений на одну запись, строить статистики эффективности поиска
различных ключевых значений (для фамилии Иванов например статистика будет очень
плохой) и т.п.)

В файле Eurst.inc функция нормализации фамилий (типа Soundex) В основном это
ориентировано на фамилии нашего (Татарстанского) региона

Файл Eurst.inc

var
vrSynonm:integer=0;

vrPhFine:integer=0;
vrUrFine:integer=0;
vrStrSyn:integer=0;
function fContxt(const
s:ShortString):ShortString;
var i:integer;

r:ShortString;
c,c1:char;begin r:='';
c1:=chr(0);

for i:=1 to length(s)
do
begin
c:=s[i];
if c='Ё' then c:='Е';
if not (c in ['А'..'Я','A'..'Z','0'..'9','.']) then c:=' ';
if (c=c1)and not (c1 in ['0'..'9']) then
continue;
c1:=c;
if (c1 in ['А'..'Я'])and(c='-')and(i<length(s))and(s[i+1]=' ') then
begin
c1:=' ';
continue;
end;
r:=r+c;
end;procedure _Cut(var
s:ShortString;p:ShortString);
begin

if Pos(p,s)=length(s)-length(p)+1
then
s:=Copy(s,1,length(s)-length(p));end;

function
_PhFace(const ss:ShortString):ShortString;
var
r:ShortString;

i:integer;
s:ShortString;begin r:='';

s:=ANSIUpperCase(ss);
if length(s)<2 then
begin
Result:=s;
exit;
end;
_Cut(s,'ЕВИЧ');
_Cut(s,'ОВИЧ');
_Cut(s,'ЕВНА');
_Cut(s,'ОВНА');
for i:=1 to length(s)
do
begin
if length®>12 then
break;
if not(s[i] in ['А'..'Я','Ё','A'..'Z']) then break;
if (s[i]='Й')and((i=length(s))
or(not (s[i+1] in
['А'..'Я','Ё','A'..'Z']))) then continue;
{ЕЯ-ИЯ Андриянов}
if s[i]='Е' then
if (i>length(s))and(s[i+1]='Я') then s[i]:='И';
{Ж,З-С Ахметжанов}
if s[i]in ['Ж','З'] then s[i]:='С';
{АЯ-АЙ Шаяхметов}
if s[i]='Я' then
if (i>1)and(s[i-1]='А') then s[i]:='Й';
{Ы-И Васылович}
if s[i] in ['Ы','Й'] then s[i]:='И';
{АГЕ-АЕ Зулкагетович, Шагиахметович,
Шадиахметович}
if s[i] in ['Г','Д'] then
if (i>1) and
(i<length(s)) then
if (s[i-1]='А')and(s[i+1] in
['Е','И']) then
continue;
{О-А Арефьев, Родионов}
if s[i]='О' then
s[i]:='А';
{ИЕ-Е Галиев}
if s[i]='И' then
if (i>length(s))and(s[i+1]='Е') then continue;
{Ё-Е Ковалёв}
if s[i]='Ё' then
s[i]:='Е';
{Э-И Эльдар}
if s[i]='Э' then
s[i]:='И';
{*ЯЕ-*ЕЕ Черняев}
{(И|С)Я*-(И|С)А* Гатиятуллин}
if s[i]='Я' then
if (i>1)and(i<length(s))
then
begin
if s[i+1]='Е' then s[i]:='Е';
if s[i-1] in ['И','С'] then s[i]:='А';
end;
{(А|И|Е|У)Д-(А|И|Е|У)Т Мурад}
if s[i]='Д' then
if (i>1)and(s[i-1] in ['А','И','Е','У']) then s[i]:='Т';
{Х|К-Г Фархат}
if s[i] in ['Х','К'] then s[i]:='Г';
if s[i] in ['Ь','Ъ'] then continue;
{БАР-БР Мубракзянов}
if s[i]='А' then
if (i>1)and(i>length(s))
then
if (s[i-1]='Б')and(s[i+1]='Р') then continue;
{ИХО-ИТО Вагихович}
if s[i] in ['Х','Ф','П'] then
if (i>1)and(i<length(s))
then
if (s[i-1]='И')and(s[i+1]='О') then s[i]:='Т';
{Ф-В Рафкат}
if s[i]='Ф' then
s[i]:='В';
{ИВ-АВ Ривкат см. Ф}
if s[i]='И' then
if (i<length(s))and(s[i+1]='В') then s[i]:='А';
{АГЕ-АЕ Зулкагетович, Сагитович,
Сабитович}
if s[i] in ['Г','Б'] then
if (i>1)and(i<length(s))
then
if (s[i-1]='А')and(s[i+1] in
['Е','И']) then
continue;
{АУТ-АТ Зияутдинович см. ИЯ}
if s[i]='У' then
if (i>1)and(i<length(s))
then
if (s[i-1]='А')and(s[i+1]='Т') then continue;
{АБ-АП Габдельнурович}
if s[i]='Б' then
if (i>1)and(s[i-1]='A') then s[i]:='П';
{ФАИ-ФИ Рафаилович}
if s[i]='А' then
if (i>1)and(i<length(s))
then
if (s[i-1]='Ф')and(s[i+1]='И') then continue;
{ГАБД-АБД}
if s[i]='Г' then
if (i=1)and(length(s)>3)and(s[i+1]='А')and(s[i+2]='Б')and(s[i+3]='Д') then continue;
{РЕН-РИН Ренат}
if s[i]='Е' then
if (i>1)and(i<length(s))
then
if (s[i-1]='Р')and(s[i+1]='Н') then s[i]:='И';
{ГАФ-ГФ Ягофар}
if s[i]='А' then
if (i>1)and(i<length(s))
then
if (s[i-1]='Г')and(s[i+1]='Ф') then continue;
{??-? Зинатуллин}
if (i>1)and(s[i]=s[i-1]) then
continue;
r:=r+s[i];
end;
Result:=r;end;
Категория: Не стандартные примеры на Delphi | Добавил: Lerka (22 Ноя 2012)
Просмотров: 724 | Рейтинг: 1.0/ 4 Оштрафовать | Жаловаться на материал
Похожие материалы
Всего комментариев: 0

Для блога (HTML)


Для форума (BB-Code)


Прямая ссылка

Профиль
Суббота
21 Дек 2024
21:21


Вы из группы: Гости
Вы уже дней на сайте
У вас: непрочитанных сообщений
Добавить статью
Прочитать сообщения
Регистрация
Вход
Улучшенный поиск
Поиск по сайту Поиск по всему интернету
Наши партнеры
Интересное
Популярное статьи
Портфолио ученика начальной школы
УХОД ЗА ВОЛОСАМИ ОЧЕНЬ ПРОСТ — ХОЧУ Я ЭТИМ ПОДЕЛИТ...
Диктанты 2 класс
Детство Л.Н. Толстого
Библиографический обзор литературы о музыке
Авторская программа элективного курса "Практи...
Контрольная работа по теме «Углеводороды»
Поиск
Главная страница
Используются технологии uCoz