![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]или может компоненты какие-то ?
Весьма оригинально...
В чём проблема-то?