Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Extended St.Proc. for MS SQL [D6, MSSQL]


Dimedrol ©   (2005-02-18 14:43:00) 

Коллеги, необходимо реализовать алгоритм,
весьма трудно реализуемый средствами Transact SQL.
Решил написать subj.

Проблема в том, что ни разу этого не делал ;-)
Искал-искал...
Сначала нашел это :
http://www.berenddeboer.net/article/1293/1293.html
но там не оказалось ссылок на необходимые файлы.

потом нашел это -
http://mastercluster.com/xproc.html
но! - закрытый проект и за деньги и причем немалые.

В общем - есть ли где-то какие-то мануалы
"для тех кто - первый раз"
или может компоненты какие-то ?

горЮ!


Dimedrol   (2005-02-18 19:19:00) [1]

Спасибо тебе, свет, Shirson ©! :-)
Просто сэкономил мне уйму времени!
Т.к. действиетльно горЮ!

Спасибо! Проверил. Работает!
:-)


Shirson   (2005-02-18 18:28:00) [2]

P.P.S.
Писать что-то в тяпницу вечером вредно - соображайка плохо пашет.
Правильный вариант, который не спотыкается на частях сложных слов:

declare
@src varchar(8000),
@keep varchar(8000),
@word varchar(8000),
@res varchar (8000),
@en int

set @src='мама мыла раму и все окна'
set @keep='окна ; мыла'
set @en=1
set @res=''

set @keep= ' '+@keep+' '

while @en<>0
begin
select @en=charindex(' ', @src)
 if @en<>0
  begin
   set @word = rtrim(substring(@src,1,@en))
   set @src= ltrim(substring(@src,@en,8000))
  end
  else
     set @word = @src
if charindex( ' '+@word+' ', @keep)<>0
 set @res=@res+' '+@word
end
print ltrim(@res)


Shirson   (2005-02-18 18:20:00) [3]

P.S.

вот эта стращная строка
set @keep= '('+char(39)+replace (replace (@keep,' ',''),';',char(39)+','+char(39))+char(39)+')'
осталась с предыдущей идеи.

В данном контексте задачи её можно смело опустить.


Shirson   (2005-02-18 18:17:00) [4]

Народ, вы утомляете своим пальцекиданием.

>Dimedrol

Лови.


declare
@src varchar(8000),
@keep varchar(8000),
@word varchar(8000),
@res varchar (8000),
@en int

set @src='мама мыла раму и все окна'
set @keep='окна ; мыла'
set @en=1
set @res=''

set @keep= '('+char(39)+replace (replace (@keep,' ',''),';',char(39)+','+char(39))+char(39)+')'

while @en<>0
begin
select @en=charindex(' ', @src)
 if @en<>0
  begin
   set @word = rtrim(substring(@src,1,@en))
   set @src= ltrim(substring(@src,@en,8000))
  end
  else
     set @word = @src
if charindex(@word, @keep)<>0
 set @res=@res+' '+@word
end
print ltrim(@res)


---------------
мыла окна


Nikolay M.   (2005-02-18 18:01:00) [5]

Функции T-SQL REPLACE и SUBSTRING видимо, неведомы...
Да если так под каждый чих XP писать, то потом трупом ляжешь такое чудо поддерживать в работоспособном состоянии.


Nikolay M.   (2005-02-18 18:00:00) [6]

Функции T-SQL REPLACE и SUBSTRING видимо, неведомы...
Да если так под каждый чих XP писать, то потом трупом ляжешь такое чудо поддерживать в работоспособном состоянии.


Dimedrol   (2005-02-18 17:32:00) [7]

Это код на Delphi.
Конечно, если(!) он будет использоваться для XP,
то конечно будет PChar


Ega23   (2005-02-18 16:35:00) [8]

А разве так
var     src,keep,sBuf,target:string;
можно??? PChar тогда уж...


Reindeer Moss Eater   (2005-02-18 15:22:00) [9]

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


Dimedrol   (2005-02-18 15:19:00) [10]

Reindeer Moss Eater ©   (18.02.05 15:16) [7]

А в xp ты "миллиметровый" код напишешь?


var     src,keep,sBuf,target:string;
begin
src:='мама мыла раму и все окна';
keep:='окна ; мыла';
target:='';
repeat
       try
       sBuf:=Q_StrTok1(src, ' ');
       if pos(sBuf, keep)>0 then target:=target+sBuf+' ';
       except
       end;
until sBuf='';


Вот, собственно, и все!


Reindeer Moss Eater   (2005-02-18 15:16:00) [11]

А в xp ты "миллиметровый" код напишешь?


Dimedrol   (2005-02-18 15:15:00) [12]

Reindeer Moss Eater ©   (18.02.05 15:11) [5]

И это задача для xp?
Бред.
Все легко делается в TSQL


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


Reindeer Moss Eater   (2005-02-18 15:11:00) [13]

И это задача для xp?
Бред.
Все легко делается в TSQL


Dimedrol   (2005-02-18 15:08:00) [14]

... сохранив, разумеется порядок слов.

То есть -
исходная строка "мама мыла раму и все окна"
"Keep"-строка :
"окна ; мыла"

результат:
"мыла окна"


Dimedrol   (2005-02-18 15:05:00) [15]

Дело в том, что мне нужно удалить из строки все слова,
КРОМЕперечисленных в другой строке...

На MSSQL.


sniknik   (2005-02-18 14:51:00) [16]

> Решил написать subj.
лучше бы описал условие задачи, может решается и без этого.

если нет
http://home.earthlink.net/~akonshin/delphi_ru.htm
(MS SQL Alerter)
http://delphibase.spb.ru/?action=viewfunc&topic=basemssql&id=10474

первую проверял, работает, вторую нет но тоже должна.


Ega23   (2005-02-18 14:46:00) [17]

или может компоненты какие-то ?

Весьма оригинально...

В чём проблема-то?


Наверх

Титульная страница Поиск, карта сайта Написать письмо