Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.036 c
6-1106247683
Kyrt
2005-01-20 22:01
2005.03.20
Автоматическое заполнение


3-1108911051
Dell3r
2005-02-20 17:50
2005.03.20
NetWork


6-1105162023
va
2005-01-08 08:27
2005.03.20
IntraWEB - БД


3-1108544034
AlexTregubov
2005-02-16 11:53
2005.03.20
Как с помощью SQL-запроса узнать сколько человеку лет?


6-1105909007
Sphinx
2005-01-16 23:56
2005.03.20
Примеры для Indy 10





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский