Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.038 c
1-1110134197
delphi-code
2005-03-06 21:36
2005.03.20
Помогите решить проблему с Dll


14-1109525705
Piter
2005-02-27 20:35
2005.03.20
Где достать декомпилятор для Visual Basic?


3-1108855982
prisoner849
2005-02-20 02:33
2005.03.20
Переход к записи


3-1108552389
atruhin
2005-02-16 14:13
2005.03.20
Вопрос про репликацию данных


3-1108749618
Urvin
2005-02-18 21:00
2005.03.20
Поймать отключение сервера