powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / есть ли в SQL что-то вроде CHR ??? HELP
7 сообщений из 7, страница 1 из 1
есть ли в SQL что-то вроде CHR ??? HELP
    #33194467
SNK2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имеем текст состоящий из заголовка и собственного текста (разделенные переводом коретки).
Стоит задача загнать заголовок и тело в разные поля таблицы.

Нужно написать харонимую процедуру.
Я для этого хочу пробегать по тексту и при первом нахождении ЭНТЕРА разбивать на заголовок и тело.
Вот только как мне определить этот несчасный ентер???

И еще вопрос по обединению строк.
Можно ли так писать:

FOR i = 1 TO 14
LET head=head||'a';
END FOR
...
Рейтинг: 0 / 0
есть ли в SQL что-то вроде CHR ??? HELP
    #33195104
Ilya Kulagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SNK2004имеем текст состоящий из заголовка и собственного текста (разделенные переводом коретки).
Стоит задача загнать заголовок и тело в разные поля таблицы.


Когда мне понадобилось отрезать от текста кусочки, я написал "внешнюю процедуру" на C, откомпилировал и с тех пор ею пользуюсь. Беда только одна: у меня куски текста были varchar(255). Что будет с TEXT, и как с ним вообще работается, без понятия.

SNK2004
Можно ли так писать:

FOR i = 1 TO 14
LET head=head||'a';
END FOR

Да.
...
Рейтинг: 0 / 0
есть ли в SQL что-то вроде CHR ??? HELP
    #33195924
SNK2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya Kulagin SNK2004имеем текст состоящий из заголовка и собственного текста (разделенные переводом коретки).
Стоит задача загнать заголовок и тело в разные поля таблицы.


Когда мне понадобилось отрезать от текста кусочки, я написал "внешнюю процедуру" на C, откомпилировал и с тех пор ею пользуюсь. Беда только одна: у меня куски текста были varchar(255). Что будет с TEXT, и как с ним вообще работается, без понятия.

SNK2004
Можно ли так писать:

FOR i = 1 TO 14
LET head=head||'a';
END FOR

Да.

может можешь выложить пример такой процедуры и как ее скомпилировать под информикс. Я просто такого никогда не делал. Где можно об этом почитать???
...
Рейтинг: 0 / 0
есть ли в SQL что-то вроде CHR ??? HELP
    #33196883
Ilya Kulagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SNK2004
может можешь выложить пример такой процедуры и как ее скомпилировать под информикс. Я просто такого никогда не делал. Где можно об этом почитать???

Прочитать - "Extending IDS", файл называется 6217.pdf, на широко известном сайте (http://www.informix.com.ua/answers/english/docs/92ids/6217.pdf) есть.

Скомпилировать - компилятором. Получить в результате библиотеку. В частном случае соляриса и gcc выглядит, например, так:

Код: plaintext
1.
2.
3.
#cc -I $INFORMIXDIR/incl -I$INFORMIXDIR/incl/public -I $INFORMIXDIR/incl/esql -c mygettime.c                         

#ld -L /opt/informix/lib -L /opt/informix/lib/esql -G mygettime.o -o /opt/informix/lib/libmytime.so

Ну а потом объявляю функцию:

Код: plaintext
1.
2.
3.
4.
create function mygettime() returning varchar( 255 );
external name "/opt/informix/lib/libmytime.so(mygettime)"
Language C
end function;


Исходник (возвращает системное время с миллисекундами в переменной типа varchar - на x86 солярисе current year to fraction возвращает только с точностью до секунд, что не всегда хорошо) выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include <mi.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/time.h>

mi_lvarchar *mygettime()
{
        int i, len;
        char buf[ 64 ];
        char t[ 19 ];
        char *ptr, *ptr_out;
        mi_lvarchar* lvarchar_out;
        struct timeval tm;
        i = gettimeofday( &tm, NULL );
        if( i ==  0  )
          {
                cftime( t, "%Y-%m-%d %R:%S", &tm.tv_sec);
                sprintf( buf, "%s.%03.f", t, (tm.tv_usec/ 1000 .) );
          }
        else
                *buf =  0 ;
        ptr = buf;
        for(len= 0 ; ptr[len]; len++);
        lvarchar_out = mi_new_var( len+ 1  );
        ptr_out = mi_get_vardata(lvarchar_out);
        while(*ptr_out++ = *ptr++);
        return lvarchar_out;
}

Неоптимальность кода - от незнания C. Ну не знаю я этого языка, а пришлось быстро писать функцию...
...
Рейтинг: 0 / 0
есть ли в SQL что-то вроде CHR ??? HELP
    #33197534
gvf112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант

----------------------------------------------------------------------------
-- Процедура get_CR_LF() возвращает два символа 0x0D 0x0A
----------------------------------------------------------------------------

--drop procedure get_CR_LF;

create procedure get_CR_LF()
returning nchar(2);

return (select data[29,30]
from sysprocbody
where procid = (select procid
from sysprocedures
where lower(procname) = lower('get_CR_LF'))
and datakey='T' and seqno=1);

end procedure;

----------------------------------------------------------------------------
-- Пример
----------------------------------------------------------------------------

execute procedure get_CR_LF()

----------------------------------------------------------------------------
-- Процедура test_proc1(input)
-- разделяет входную строку (input)
-- на заголовок (head) и остальной текст (body)
----------------------------------------------------------------------------

--drop procedure test_proc1;

create procedure test_proc1( input nvarchar(250) )
returning nvarchar(250);
define head, body nvarchar(250);
define crlf nchar(2);

let crlf = get_CR_LF();

return 'input = ' || trim(input) with resume;

let head = replace(input,crlf,rpad(' ',500,' '));

let body = substr(input,length(head)+3);

return 'head = ' || trim(head) with resume;
return 'body = ' || trim(body) with resume;

end procedure;

----------------------------------------------------------------------------
-- Пример
----------------------------------------------------------------------------

execute procedure test_proc1( 'Заголовок' || get_CR_LF() || 'Остальной
текст' )

--результат такой:
--input = Заголовок <перевод строки> Остальной текст
--head = Заголовок
--body = Остальной текст
----------------------------------------------------------------------------

Данный сценарий любезно предоставил И.Каленченко .... :)

C уважением,
GVF112
...
Рейтинг: 0 / 0
есть ли в SQL что-то вроде CHR ??? HELP
    #33197657
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GVF112Данный сценарий любезно предоставил И.Каленченко .... :)
Согласно гуглю первая публикация рецепта от - Lambros Papadopoulos 20.04.2001

Данный сценарий есть также в UCDI FAQ с момента его основания.


Q.> Как вставить перенос строки (другой непечатный символ) в select?
A.> http://sql.ru/forum/actualthread.aspx?tid=146507

select to_char(today, "%n") from one_row
Можно и %t табуляцию вывести.

A.> Евгений Нечаев
select "aaa"||ascii(10)||"bbb" from systables where tabid=1;

Где ascii(10), процедура выводящая символ из таблицы.

CREATE PROCEDURE ascii(code INTEGER)
RETURNING char(1);
define ch_r char(1);
select ch into ch_r from ascii_t where ascii_t.code=code;
RETURN ch_r;
END PROCEDURE;
Структура и содержание таблицы я думаю понятны.

В 9-ке функцию ascii() можно реализовать на C.

дополнение Леонид Воронцов:
------------
Символы CR и LF есть в теле процедуры systdist,
а достать их можно:
SELECT data[ 69, 70 ] FROM sysprocbody
WHERE datakey = 'T' AND procid = 1 AND seqno = 1

дополнение Игорь Завгородний:
------------
Интересное решение, но имеющее минимум два но:
1. На 9-ке смещение будет другим.
2. CR LF будет только в Win инсталляции.

Обойти оба "Но" конечно можно, создав свою процедуру, обладающую
аналогичными свойствами.
------

Q.> Каким способом затолкать к примеру перевод строки в поле Ch
A.> Евгений Нечаев
Или программно используя переменную, или подготовив файл для load
где перевод строки слешируется.

10|\<символ>|
...
Рейтинг: 0 / 0
есть ли в SQL что-то вроде CHR ??? HELP
    #33202620
SNK2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО!!! Проблема решена!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / есть ли в SQL что-то вроде CHR ??? HELP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]