Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

Max Pro

 
Название:

Функция грамотного разбиения sString по i символов на SQL 2000 и Oracle 9.

Дата: 08 September 2005
Описание: Длинные строки разбиваются на более короткие по i символов. Причём после отсчёта i символов ищется первый пробел и только после этого добавляется разделитель '\n', что позволяет оставить слова неразбитыми. 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=160]Функция грамотного разбиения sString по i символов на SQL 2000 и Oracle 9.[/CODEPOST]
Оценить:
  1 -- SQL 2000
  2 CREATE FUNCTION dbo.divide_string (@sString nvarchar(4000),@i int)  
  3 RETURNS nvarchar(4000) AS  
  4 BEGIN 
  5  -- var
  6  DECLARE @sOut nvarchar(4000),@iNum int,@j int,@iLenO int,@iLenS int,@k int,@kk int,@iS int
  7  -- end var
  8  SET @sString=IsNull(@sString,'')
  9  SET @i=IsNull(@i,0)
 10  SET @iLenS=Len(@sString)
 11  IF @iLenS<=0 OR @i<=0 OR @iLenS<@i RETURN @sString
 12  SET @sOut=''
 13  SET @iNum=Ceiling(Len(@sString)/@i)
 14  IF @iNum*@i<@iLenS SET @iNum=@iNum+1
 15  SET @k=Ceiling(@iLenS/@iNum)
 16  IF @k*@iNum<@iLenS SET @k=@k+1
 17  SET @j=0
 18  SET @iS=0
 19  WHILE Len(@sOut)-@j<@iLenS AND @j<100
 20  BEGIN
 21   SET @kk=@k
 22   WHILE Len(@sOut)+@kk-@j<@iLenS
 23   BEGIN
 24    IF Substring(@sString,Len(@sOut)+@kk-@j,1)<>' ' SET @kk=@kk+1
 25    ELSE BREAK
 26   END
 27   IF @j=0
 28    SET @sOut=@sOut+Substring(@sString,1,@kk)+'\n'
 29   ELSE
 30    SET @sOut=@sOut+Substring(@sString,Len(@sOut)+1-@j,@kk)+'\n'
 31   SET @j=@j+2
 32  END
 33  SET @sOut=Substring(@sOut,1,Len(@sOut)-2)
 34  RETURN @sOut
 35 END
 36 -- Oracle 9
 37 CREATE OR REPLACE FUNCTION divide_string (sString IN varchar2,i IN NUMBER)
 38 RETURN VARCHAR2 IS
 39  sRes VARCHAR2(4000) := sString;
 40  sOut varchar2(4000) := NULL;
 41  iLenS PLS_INTEGER;--длина строки
 42  iNum PLS_INTEGER;--число разбиений
 43  k PLS_INTEGER;--по скольку символов
 44  j PLS_INTEGER;
 45 BEGIN
 46  IF sString IS NOT NULL AND i > 2 AND LENGTH(sString) > i THEN
 47  iLenS := LENGTH(sString);--Длина строки (60)
 48  iNum := Ceil(iLenS/i);--Число разбиений (при i=40: 2)
 49  k := Ceil(iLenS/iNum);--По скольку символов (30)
 50  WHILE sRes IS NOT NULL LOOP
 51  j := INSTR(sRes, ' ', k);
 52  IF j > 0 THEN
 53  sOut := sOut || SUBSTR (sRes, 1, j-1) || '\n';
 54  sRes := SUBSTR(sRes, j+1);
 55  ELSE
 56  sOut := sOut || sRes;
 57  sRes := NULL;
 58  END IF;
 59  END LOOP;
 60  ELSE
 61  RETURN sString;
 62  END IF;
 63  RETURN sOut;
 64 END divide_string;
 65 
Вернуться к списку исходников в категории ADO.NET
 
Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта