Текущий архив: 2005.03.20;
Скачать: CL | DM;
Вниз
Extended St.Proc. for MS SQL Найти похожие ветки
← →
Dimedrol © (2005-02-18 14:43) [0]Коллеги, необходимо реализовать алгоритм,
весьма трудно реализуемый средствами Transact SQL.
Решил написать subj.
Проблема в том, что ни разу этого не делал ;-)
Искал-искал...
Сначала нашел это :
http://www.berenddeboer.net/article/1293/1293.html
но там не оказалось ссылок на необходимые файлы.
потом нашел это -
http://mastercluster.com/xproc.html
но! - закрытый проект и за деньги и причем немалые.
В общем - есть ли где-то какие-то мануалы
"для тех кто - первый раз"
или может компоненты какие-то ?
горЮ!
← →
Ega23 © (2005-02-18 14:46) [1]или может компоненты какие-то ?
Весьма оригинально...
В чём проблема-то?
← →
sniknik © (2005-02-18 14:51) [2]> Решил написать subj.
лучше бы описал условие задачи, может решается и без этого.
если нет
http://home.earthlink.net/~akonshin/delphi_ru.htm
(MS SQL Alerter)
http://delphibase.spb.ru/?action=viewfunc&topic=basemssql&id=10474
первую проверял, работает, вторую нет но тоже должна.
← →
Dimedrol © (2005-02-18 15:05) [3]Дело в том, что мне нужно удалить из строки все слова,
КРОМЕ перечисленных в другой строке...
На MSSQL.
← →
Dimedrol © (2005-02-18 15:08) [4]... сохранив, разумеется порядок слов.
То есть -
исходная строка "мама мыла раму и все окна"
"Keep"-строка :
"окна ; мыла"
результат:
"мыла окна"
← →
Reindeer Moss Eater © (2005-02-18 15:11) [5]И это задача для xp?
Бред.
Все легко делается в TSQL
← →
Dimedrol © (2005-02-18 15:15) [6]Reindeer Moss Eater © (18.02.05 15:11) [5]
И это задача для xp?
Бред.
Все легко делается в TSQL
Я не страдаю, горячечным бредом!
И прекрасно понимаю, что на _чистом_ TSQL можно даже регулярные
выражения реализовать.
Только километорвый код писать не хочется.
← →
Reindeer Moss Eater © (2005-02-18 15:16) [7]А в xp ты "миллиметровый" код напишешь?
← →
Dimedrol © (2005-02-18 15:19) [8]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:22) [9]И что?
На TSQL этот же алгоритм будет хоть сколько - нибудь заметно длинее, что бы заморачиваться с созданием DLL, регистрацией XP и раздачей прав. Не говоря уже о накладных расходах на передачу строк туда-сюда?
← →
Ega23 © (2005-02-18 16:35) [10]А разве так
var src,keep,sBuf,target:string;
можно??? PChar тогда уж...
← →
Dimedrol © (2005-02-18 17:32) [11]Это код на Delphi.
Конечно, если(!) он будет использоваться для XP,
то конечно будет PChar
← →
Nikolay M. © (2005-02-18 18:00) [12]Функции T-SQL REPLACE и SUBSTRING видимо, неведомы...
Да если так под каждый чих XP писать, то потом трупом ляжешь такое чудо поддерживать в работоспособном состоянии.
← →
Nikolay M. © (2005-02-18 18:01) [13]Функции T-SQL REPLACE и SUBSTRING видимо, неведомы...
Да если так под каждый чих XP писать, то потом трупом ляжешь такое чудо поддерживать в работоспособном состоянии.
← →
Shirson © (2005-02-18 18:17) [14]Народ, вы утомляете своим пальцекиданием.
>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)
---------------
мыла окна
← →
Shirson © (2005-02-18 18:20) [15]P.S.
вот эта стращная строкаset @keep= "("+char(39)+replace (replace (@keep," ",""),";",char(39)+","+char(39))+char(39)+")"
осталась с предыдущей идеи.
В данном контексте задачи её можно смело опустить.
← →
Shirson © (2005-02-18 18:28) [16]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)
← →
Dimedrol © (2005-02-18 19:19) [17]Спасибо тебе, свет, Shirson ©! :-)
Просто сэкономил мне уйму времени!
Т.к. действиетльно горЮ!
Спасибо! Проверил. Работает!
:-)
Страницы: 1 вся ветка
Текущий архив: 2005.03.20;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.026 c