powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / знак переноса строки?
25 сообщений из 76, страница 1 из 4
знак переноса строки?
    #32077906
Паблик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте
Возможно ли Interbase указать значок переноса строки?
или как-то указывать коды ASCII?
Т. е. мне нужно получить следующее
str=str1||<перенос строки>||str2||<перенос строки>||str3
...
Рейтинг: 0 / 0
знак переноса строки?
    #32077948
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. Недавно, после чтения док по Postgre, сам такое спрашивал и сказали вот что:
Спец. символов нет, но можно:
1 использовать УДФ
2 создать таблицу соотв. кодов символов и самих символов (можно в варианте поля типа массив) и использовать это.
...
Рейтинг: 0 / 0
знак переноса строки?
    #32077955
Паблик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот я сейчас как раз эту UDF функцию и пишу. Просто хотел узнать можно ли это сделать проще.
Спасибо за ответ.
...
Рейтинг: 0 / 0
знак переноса строки?
    #32078276
Паблик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, на всякий случай если кому понадобиться то такая функция уже есть, надо ее только подключить.
DECLARE EXTERNAL FUNCTION ASCII_CHAR
INTEGER
RETURNS CHAR(1)
ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf';
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
знак переноса строки?
    #36070231
MEGA_MOZG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема конечно старая, но может еще кому понадобится.
Когда-то сталкивался с такой проблемой. Решил ее топорно.
Из хранимки возврашаю строку:
str = str1 || ^ || str2 || ^ || str3

Возвращал строку в Delphi.

А там уже
Код: plaintext
str := AnsiReplaceText(str, '^', # 13 # 10 );
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070245
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МегаМозг, ты некрофил и тормозГ.
Код: plaintext
1.
2.
3.
declare crlf char( 2 );
crlf = '
';
str = str1 || crlf || str2 || crlf || str3;
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070348
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryМегаМозг, ты некрофил и тормозГ.
Код: plaintext
1.
2.
3.
declare crlf char( 2 );
crlf = '
';
str = str1 || crlf || str2 || crlf || str3;

А вдруг под Linux'ом в crlf окажется '\x0a\x20' вместо ожидаемых '\x0d\x0a'? ;)
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070392
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку ascii_char уже давно имеет статус SDF, то все сломаные копья - на свалку.
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070437
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzirtА вдруг под Linux'ом в crlf окажется '\x0a\x20' вместо ожидаемых '\x0d\x0a'? ;)
Кем ожидаемых?
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070471
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryDzirtА вдруг под Linux'ом в crlf окажется '\x0a\x20' вместо ожидаемых '\x0d\x0a'? ;)
Кем ожидаемых?
Тобой, кем же еще... Я же твой пост процитировал. Ты бы хотя бы VarChar(2) объявил.

PS: Хотя я уже слышу ответ, что-то типа "я Линуксом не пользуюсь, мне это не интересно" ;)
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070485
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dzirt!
You wrote on Thu, 02 Jul 09 13:24:18 GMT:

Dzirt D> PS: Хотя я уже слышу ответ, что-то типа
"я Линуксом не пользуюсь, мне это не интересно" ;)серверу пох, на какой он платформе.
перенос строки формирует инструмент, которым ты альтеришь процедуру.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070487
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Dzirt
> WildSery
> Кем ожидаемых?
> Тобой, кем же еще... Я же твой пост процитировал. Ты бы хотя бы VarChar(2) объявил.

А задлянафига там варчар?, там что может быть переменное количество символов?

> PS: Хотя я уже слышу ответ, что-то типа "я Линуксом не пользуюсь, мне это не интересно" ;)

Да по моему он как раз и сидит на линуксах


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070592
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Hello, Dzirt!
You wrote on Thu, 02 Jul 09 13:24:18 GMT:

Dzirt D> PS: Хотя я уже слышу ответ, что-то типа
"я Линуксом не пользуюсь, мне это не интересно" ;)серверу пох, на какой он платформе.
перенос строки формирует инструмент , которым ты альтеришь процедуру.

Я как раз об этом и написал, если ты не заметил... Могу и уточнить - инструментом может выступить любой текстовый редактор под Linux, в котором будет набран и сохранен скрипт, который будет выполнен через isql. Текстовый редактор в качестве перевода строки вставит одиночный \x0a, а пробел добавит уже сервер т.к. переменная объявлена CHAR(2), а одиночный \x0a занимает только один символ.
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070594
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Dzirt
> WildSery
> Кем ожидаемых?
> Тобой, кем же еще... Я же твой пост процитировал. Ты бы хотя бы VarChar(2) объявил.

А задлянафига там варчар?, там что может быть переменное количество символов?
...

Вот задля того, чтобы под Linux в переменной crlf не получилось '\x0a\x20'. Предыдущий пост почитай...
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070678
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказалось все еще интереснее :) isql от 2.1.3.18182 даже под Windows пересылает на сервер переводы строки в виде одного символа \x0a (\x0d просто удаляется). Поэтому если скрипт

Код: 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.
SET NAMES WIN1251;
SET SQL DIALECT  3 ;

CONNECT 'localhost:D:\Database\test3.fdb' USER 'SYSDBA' PASSWORD 'masterkey';

SET AUTODDL ON;

--
-- Исправление...
--

set term ^ ;

recreate procedure C
returns (
    STATUS varchar( 100 ))
AS
/* */
    declare variable CRLF CHAR( 2 );
begin
    CRLF = '
';
    STATUS = '!' || CRLF || '!';
    suspend;
end
^

set term ; ^

commit;
выполнить при помощи isql и при помощи IBEScript, то процедура C будет возвращать разные результаты:
'!\x0a\x20!' - после isql
'!\x0d\x0a!' - после IBEScript

Даже не понадобилось эмулировать переводы строки в стиле Unix чтобы добиться неопределенного поведения...
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070690
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dzirt!
You wrote on Thu, 02 Jul 09 14:43:24 GMT:

Dzirt D> Оказалось все еще интереснее :) isql от 2.1.3.18182 даже под Windows
D> пересылает на сервер переводы строки в виде одного символа \x0a (\x0d просто удаляется).в трекер, будьте так любезны.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070722
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzirtТобой, кем же еще... Я же твой пост процитировал. Ты бы хотя бы VarChar(2) объявил.
А, ты о длине. Ну пусть будет варчар.
У меня клиенты - виндовые. И где там сервер стоит, не важно. Кстати, все линуксовые, сервера, в смысле.
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070824
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryDzirtТобой, кем же еще... Я же твой пост процитировал. Ты бы хотя бы VarChar(2) объявил.
А, ты о длине. Ну пусть будет варчар.
У меня клиенты - виндовые . И где там сервер стоит, не важно. Кстати, все линуксовые, сервера, в смысле.
Я как раз писал чуть выше о возможном ответ "у меня не Linux, мне пофиг" :)
А на самом деле (я чуть выше написал об этом) значение имеет не клиент, а то средство, которым ты процедуру создавал - если это был isql из скрипта, то ты как раз во всех своих клиентах получишь лишний пробел. О чем я тебе и пишу уже в который раз, а ты не читаешь... :/
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070839
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Hello, Dzirt!
You wrote on Thu, 02 Jul 09 14:43:24 GMT:

Dzirt D> Оказалось все еще интереснее :) isql от 2.1.3.18182 даже под Windows
D> пересылает на сервер переводы строки в виде одного символа \x0a (\x0d просто удаляется).в трекер, будьте так любезны.

Зачем? Если не секрет, конечно... Я не считаю это поведение неправильным. Я считаю неправильным тот способ, которым предлагалось получить в переменной символ(ы) перевода строки. Потому что... уже не хочется повторяться. Не нужно просто советовать такой способ. Правильный способ на мой взгляд такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
    declare variable CRLF VARCHAR( 1 );  -- ну или CHAR(1) для любителей CHAR'ов...
...
begin
    CRLF = ascii_char(  10  );
...
end
где ascii_char либо UDF для сервера версии младше 2.1, либо это встроенная функция для FB 2.1 и старше
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070846
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dzirt!
You wrote on Thu, 02 Jul 09 15:52:49 GMT:

Dzirt D> Зачем?потому, что палочки должны быть попендикулярны! (С)

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070915
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzirtЯ как раз писал чуть выше о возможном ответ "у меня не Linux, мне пофиг" :)
А на самом деле (я чуть выше написал об этом) значение имеет не клиент, а то средство, которым ты процедуру создавал - если это был isql из скрипта, то ты как раз во всех своих клиентах получишь лишний пробел. О чем я тебе и пишу уже в который раз, а ты не читаешь... :/
Что я не читаю? У тебя клиенты под линуксом работают?
Текст многострочный имеет смысл выдавать только на клиента. Как это он не имеет значение?
Вариант с фиксированным ascii_char(10) как раз практически никого не устроит, за редким исключением.
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070979
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery...
Что я не читаю? У тебя клиенты под линуксом работают?
Текст многострочный имеет смысл выдавать только на клиента. Как это он не имеет значение?
Вариант с фиксированным ascii_char(10) как раз практически никого не устроит, за редким исключением.
Еще раз, медленно, по буквам - если создать процедуру с кодом, который ты привет в самом начале (там где ... crlf CHAR(2) ), из скрипта через isql -i script.sql, и как к тому же оказалось вовсе не обязательно под Linux, то в результате в переменной crlf будет два символа - перевод строки (0x0A) и ПРОБЕЛ. Поэтому на клиента вернется текст в переводом строки и ЛИШНИМ ПРОБЕЛОМ. Уже даже не знаю как бы тебе еще понятнее объяснить...

Вот тебе скрипт:
Код: 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.
SET NAMES WIN1251;
SET SQL DIALECT  3 ;

CONNECT 'localhost:D:\Database\test3.fdb' USER 'SYSDBA' PASSWORD 'masterkey';

SET AUTODDL ON;

set term ^ ;

recreate procedure TEST
returns (
    STATUS VarChar( 10 ))
as
/* */
    declare variable CRLF CHAR( 2 );
begin
    CRLF = '
';
    STATUS = '1' || CRLF || '2';
    suspend;
end
^

set term ; ^

commit;

select STATUS from TEST;
commit;
Выполнив его через isql (от сервера 2.1.3.18182) даже под Windows я получаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
C:\>isql -i y.sql
Use CONNECT or CREATE DATABASE to specify a database

STATUS
==========
1
 2
Видишь перед '2' пробел или нет? Linux вначале был мной приведен только как пример системы, в которой перевод строки состоит из одного символа LF, в отличие от Windows, где он состоит из двух символов. При этом совершенно не важно на какой системе стоит твой сервер.

Теперь хоть тебе понятно о чем я говорю?
...
Рейтинг: 0 / 0
знак переноса строки?
    #36070994
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dzirt
Еще раз, медленно, по буквам - если создать процедуру с кодом, который ты привет в самом начале (там где ... crlf CHAR(2) ), из скрипта через isql -i script.sql, и как к тому же оказалось вовсе не обязательно под Linux, то в результате в переменной crlf будет два символа - перевод строки (0x0A) и ПРОБЕЛ.
Для бестолковых МП же сказал, что какие фигни будут "переводом строк" зависит:
МПперенос строки формирует инструмент, которым ты альтеришь процедуру.
- Чего нипанятна??
Хоть в курсе, почему там 2 "знака", а не один?

Dzirt Поэтому на клиента вернется текст в переводом строки и ЛИШНИМ ПРОБЕЛОМ.
Задрали Комикзы...
Винде - #13#10, а Маках - #10#13
А в комигзах...
(Не-е-е, не могу я в приличном опчестве сказать куда им девать лишний пробел)
...
Рейтинг: 0 / 0
знак переноса строки?
    #36071010
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne
(Не-е-е, не могу я в приличном опчестве сказать куда им девать лишний
пробел)

Это ещё ерунда, а вот если у БД случиться defaul character set utf8, то
им придётся озаботиться куда бы девать пять лишних пробелов...

VarChar - самый идеологически правильный тип!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
знак переноса строки?
    #36071058
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzirtЕще раз, медленно, по буквам - если создать процедуру с кодом, который ты привет в самом начале (там где ... crlf CHAR(2) ), из скрипта через isql -i script.sql, и как к тому же оказалось вовсе не обязательно под Linux, то в результате в переменной crlf будет два символа - перевод строки (0x0A) и ПРОБЕЛ. Поэтому на клиента вернется текст в переводом строки и ЛИШНИМ ПРОБЕЛОМ. Уже даже не знаю как бы тебе еще понятнее объяснить...
Ещё раз, медленно, по буквам - если не пользоваться isql с только что найденной тобой ошибкой, и сделать-таки varchar(2), с каковой поправкой я согласился, то на чём работает КЛИЕНТ, под ту систему и будет скомпилен ПЕРЕНОС СТРОКИ.
Безо всяких дополнительных проверок унутре процедуры.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 1 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / знак переноса строки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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